Асинхронность и многопоточность в Яндекс.Такси —...
-
Upload
yandex -
Category
Technology
-
view
353 -
download
3
description
Transcript of Асинхронность и многопоточность в Яндекс.Такси —...
![Page 1: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/1.jpg)
1
![Page 2: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/2.jpg)
2
![Page 3: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/3.jpg)
3
![Page 4: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/4.jpg)
4
![Page 5: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/5.jpg)
5
•
•
•
![Page 6: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/6.jpg)
6
•
•
•
![Page 7: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/7.jpg)
7
![Page 8: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/8.jpg)
8
•
•
•
![Page 9: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/9.jpg)
9
_drivers = {'dict': None, 'rtree': None}
@defer.inlineCallbacks
def update_drivers_positions():
try:
gzipped = yield fetch_all_tracks()
(dct, rtree) = yield defer.deferToThread(
extract_gzipped_tracks, gzipped)
_drivers['dict'] = dct
_drivers['rtree'] = rtree
finally:
callLater(UPDATE_INTERVAL, update_drivers_positions)
![Page 10: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/10.jpg)
10
•
•
![Page 11: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/11.jpg)
11
•
•
•
![Page 12: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/12.jpg)
12
import zlib
import base64
from twisted.internet import threads
def main():
strings = ['%010000000d' % i for i in range(1000)]
for string in strings:
d = threads.deferToThread(compress, string)
#d.addCallbacks(do_something_with_result)
def compress(string):
return base64.b64encode(zlib.compress(string, 9))
![Page 13: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/13.jpg)
13
![Page 14: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/14.jpg)
14
•
•
•
![Page 15: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/15.jpg)
15
•
•
![Page 16: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/16.jpg)
16
![Page 17: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/17.jpg)
17
•
•
•
•
![Page 18: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/18.jpg)
18
from router import build_route
@defer.inlineCallbacks
def find_suitable_drivers(src_point):
nearest = find_nearest_drivers(src_point, NEAREST_LIMIT)
estimates = yield defer.DeferredList(
[build_route(driver_point, src_point)
for (driver_point, _) in nearest])
suitable = []
for ((driver_point, driver), estimate) in zip(nearest, estimates):
(succeed, data) = estimate
if succeed:
(distance, time) = data
else:
(distance, time) = predict_route(driver_point, src_point)
suitable.append((time, distance, driver))
return sorted(suitable)
![Page 19: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/19.jpg)
19
•
•
•
![Page 20: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/20.jpg)
20
•
•
•
•
![Page 21: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/21.jpg)
21
@defer.inlineCallbacks
def request_suitable_drivers(order_id, src_point):
while (yield not is_order_expired(order_id)):
suitable = yield find_suitable_drivers(src_point)
for (park, request) in (yield build_requests(suitable)):
reactor.callLater(0, send_request, park, request)
del suitable
del request
yield sleep(REQUEST_INTERVAL)
![Page 22: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/22.jpg)
22
![Page 23: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/23.jpg)
23
![Page 24: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/24.jpg)
24
•
•
•
•
![Page 25: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/25.jpg)
25
•
•
•
•
![Page 26: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/26.jpg)
26
•
•
•
•
![Page 27: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/27.jpg)
27
•
•
•
![Page 28: Асинхронность и многопоточность в Яндекс.Такси — Дмитрий Курилов](https://reader033.fdocuments.us/reader033/viewer/2022050919/54621408af7959d8588b747e/html5/thumbnails/28.jpg)
28
•
•