Как я должен многопоточность это в Python? - PullRequest
0 голосов
/ 14 марта 2019

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

Итак, я планирую сделать следующее:

  • Добавить координаты в массив / деку изкаждый кадр.

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

Решит ли это проблему?Есть ли другой способ быстро выполнять клики с помощью pyautogui?

(я не знаком с многопоточностью)

1 Ответ

0 голосов
/ 14 марта 2019

Я думаю, что это зависит, это стандартная схема распределения работы. Ваш процессор загружен? Если это так, потоки не помогут вам масштабироваться из-за конфликта GIL Если это связано с IO, то потоки могут быть хорошим местом для начала.

С шаблоном пула потоков вы будете работать так, как вы обрисовали:

  • ставит в очередь работу без блокировки из основного потока, а затем потребительские потоки будут читать из очереди в цикле.

Если ваша обработка связана с ЦП, может помочь многопроцессорный пул, использующий тот же шаблон:

Многопроцессорность обеспечивает абстракцию пула, и это было бы то же самое, за исключением того, что для очереди потребовалось бы какое-то межпроцессное взаимодействие (обрабатывается многопроцессорной очередью)

https://docs.python.org/2/library/multiprocessing.html#using-a-pool-of-workers

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

...