我应该如何在python中对此进行多线程处理?

时间:2019-03-14 15:22:02

标签: python multithreading pyautogui

我有一个坐标列表,我必须在其中使用pyautogui模拟鼠标单击。这些坐标基本上是从帧中的实时视频流中检索的。因此,模拟每个帧的鼠标单击速度不够快。

所以我打算做的是:

  • 将坐标从每个帧添加到数组/双端队列。

  • 然后(也许)创建一个线程,在该线程中我可以遍历数组并模拟鼠标单击,从而不会阻塞主线程。

这可以解决问题吗?还有其他方法可以使用pyautogui快速执行点击吗?

(我不熟悉多线程)

1 个答案:

答案 0 :(得分:0)

我认为这取决于,这是分配工作的常见模式。您的工作负载是否受CPU限制?如果这样的话,由于GIL争用,线程将无法帮助您进行扩展。如果它是IO绑定的,那么线程可能是一个不错的起点。

使用thread pool pattern,您可以像概述那样展开工作:

  • 排队工作而不会阻塞主线程,然后使用者线程将在循环中从队列中读取。

如果您的处理受CPU限制,则使用相同模式的多处理池可能会有所帮助:

多处理DOES提供了一个池抽象,除了队列需要某种进程间通信(由多处理队列处理)以外,它是同一件事。

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

每个工具都应该相对容易设置,并且应该很容易对每个工具进行基准测试,以查看它们是否可以提高性能。