Обработать очередь и вернуть результат соответствующему абоненту из разных процессов - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь создать очередь, которая будет возвращать обработанную HTML вызывающей стороне в Python. Сейчас у меня есть много процессов, которые выполняются одновременно (в пуле), и я бы хотел, чтобы они вызывали функцию так, чтобы URL-адрес каждого процесса был помещен в очередь, чтобы они могли обрабатывать один из них. затем возвращаем (или возвращаемся?) получателю с результатом и возобновляем оставшуюся работу.

Моя первоначальная идея - создать файл с именем Render.py, который будет работать основной функцией (например, в то время как l oop) и отображает URL, когда в очереди есть что-то, и также будет функция enqueue (url), которая может ставить ссылку в очередь в очередь. Так что каждый процесс может поставить в очередь URL-адрес, вызвав Render.enqueue (url) и, надеюсь, получить обработанный HTML этого URL-адреса.

Render.py:

import time
import asyncio

queue = []

def enqueue(url):
    queue.append(url)

async def crawl():
    # do rendering
    result = await HTML_RENDERING(url)    # some rendering things going on here
    return result

if __name__ == "__main__":
    max_phantoms = 2
    while True:
        if (len(queue) > 0):
            url = queue.pop(0)
            yield with crawl(url)       # not sure yield to go back to caller
            time.sleep(5)


Код других процессов :

import Render

# ...
result = Render.enqueue(url)        # how to get the result?
# ...

Я думаю, что он очень похож на монитор, но я не уверен, как начать.

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