Как использовать доходность с трубами / несколько процессов Python - PullRequest
0 голосов
/ 06 марта 2020

Я ищу несколько советов относительно небольшого Python сканера craigslist. Поскольку существует так много веб-сайтов craigslist, и мне нужно запускать их один за другим, я разделил сканирование на несколько процессов, используя Pipe () (поскольку Pipe поддерживается AWS Lambda). Запуск приложения может занять от 2 до 8 минут при поиске вещей по всей территории США и Канады. Вместо того, чтобы ждать единовременного возврата всех результатов. Я хотел бы вернуть результаты каждого процесса, когда он будет запущен, чтобы я мог постоянно обновлять клиентскую часть новыми результатами.

    for i in range(len(site_list)):
        site_counter = site_counter + len(site_list[i])
        processes.append(Process(target=f, args=(site_list[i], event['category'], event['search_query'], child_conn,)))

    for process in processes:
        process.start()

    for process in processes:
        yield parent_conn.recv() # My attempt to return the result of each process

    for process in processes:
        process.join()

Когда я включаю выход в функцию, которую он запускает, но сразу выводит код выхода 0.

В чем проблема, я думаю: я читал о yield и генераторах. Я чувствую, как будто процесс не закончен, выполняя свою работу до запуска урожая. Я также думаю, потому что процесс находится в другом потоке до .Join (), вы не можете уступить для функции из другого потока.

...