Считайте, что я хочу реализовать следующие logi c:
def fetch_only_once(ids: List[Thing]):
# lookup every id every 10s
# lookup(ids[0])
# wait 10s
# lookup(ids[1])
# wait 10s
# ...
# example implementation using id
for (i, id) in enumerate(ids):
threading.Timer(10 * i, lookup, arg=id)
Обратите внимание, что эти поисковые запросы являются отдельными запросами к случайному серверу.
Самая большая проблема здесь в том, что число потоков в порядке количества элементов. Основываясь на моем ограниченном знании python, я не думаю, что язык очень хорошо масштабируется с несколькими потоками, особенно с произвольно большим количеством потоков.
Я не уверен, как здесь выглядит правильное решение, но вот идея:
def f():
thread = create_thread()
for (i, id) in enumerate(ids):
wait(timer=10) # non blocking
thread.async_dispatch(job)
async_dispatch
просто отправляет задание в очередь потоков каждые 10 секунд. Некоторые поиски могут не завершиться sh вовремя, поэтому очередь может остановиться.
Я не уверен, есть ли в python конструкция, которая имеет дело с чем-то вроде этого, но любые идеи будут полезны.