Переменная агрегата ожидала l oop in Python - PullRequest
0 голосов
/ 03 августа 2020

Считайте, что я хочу реализовать следующие 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 конструкция, которая имеет дело с чем-то вроде этого, но любые идеи будут полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...