关于多线程,Python中的计时器是如何工作的?
如果我打电话关于多线程,Python中的计时器是如何工作的?,python,multithreading,Python,Multithreading,如果我打电话 Timer(.1, some_function, [some_arguments]).start() 很多时候,幕后到底发生了什么 我们问题的根源是 我们有一种基本上是: def move(target): force = calculateForce(target-getCurrentPosition()) if(force != 0) setForce(force) Timer(.1, moveCursor, [tx]).start() else: s
Timer(.1, some_function, [some_arguments]).start()
很多时候,幕后到底发生了什么
我们问题的根源是
我们有一种基本上是:
def move(target):
force = calculateForce(target-getCurrentPosition())
if(force != 0)
setForce(force)
Timer(.1, moveCursor, [tx]).start()
else:
setForce(0)
设置力后,我们需要在一定时间后检查是否应该停止。(此信息发送到/来自不触发事件的外部物理设备。)
这个函数花费了多少时间,这是一个奇怪的问题,而且在一段时间后,我们会遇到“无法启动新线程”错误
这让我相信计时器(…)不会重用线程,而是每次都创建一个新线程
再加上我们所使用的库不是线程安全的,这些错误会有一定的意义……正确:每次调用
计时器都会启动一个新线程。实际上,classthreading.Timer
被记录为“线程”。您可以通过阅读第707行来确认这一点
一个好的替代方法是在单个线程中运行,通过队列接收请求。队列
实例(本质上是线程安全的)并本质上序列化它们(这也可以处理“非线程安全库”不需要进一步锁定或同步的问题(当然,这取决于您如何安排总体架构)