Пример неблокирующего метода как отдельного потока из очереди (Python) - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь понять, как неблокирующий поток с использованием очередей может создаваться по требованию в Python.Этот предмет довольно сложен для такого нуба, как я, и мне нужен простой пример, чтобы помочь мне в обучении.

Пример:

Скажем, у меня есть main script, который постоянносоздает новый каталог и записывает некоторые изображения в файлы внутри этого каталога.Как я могу затем выполнять вызовы как отдельный неблокирующий поток для метода в другом сценарии (other_script.py), чтобы выполнить некоторую работу над каждым из этих каталогов, указав их имена?Путь для простоты фиксирован, поскольку текущий рабочий каталог и имя каталога основаны на простой генерации меток времени.

Ниже приведен мой код для этого примера:

# main script
import os
import cv2
import time
from other_script import *

if __name__ == "__main__":
    while True:
        if some_event_triggered:
            directory = "." + time.strftime("\\%Y-%m-%dT%H%M%S%z")
            if not os.path.isdir(directory):
                os.mkdir(directory)

            # assuming images are given
            for num, img in enumerate(images):
                name_of_file = directory + "\\img_num" + str(num) + ".jpg"
                cv2.imwrite(name_of_file, img)

             # call do_work for this directory 
             # but continue 'listening' for new event triggers
             do_work(timestamp)


# other_script.py
import os

def do_work(timestamp):
    directory = os.path.join(os.getcwd(), + timestamp)
    # do some work on that directory

Я рассмотрел вопрос об использовании queue.Queue для хранения всех временных меток и вызова функции do_work в качестве потока фонового процесса для каждой временной метки.Но чтение таких примеров https://stackoverflow.com/a/16207592 было слишком сложным для меня, чтобы я мог адаптировать и реализовывать очереди и потоки в этом простом примере.

Извинения, если это слишком простой вопрос, но ямне нужно прочитать код, реализующий мой пример, чтобы облегчить мое понимание предмета.

...