【发布时间】:2010-07-22 14:40:15
【问题描述】:
我从 python 中的多线程开始(或者至少我的脚本有可能创建多个线程)。这个算法是互斥锁的正确用法吗?我还没有测试过这段代码,它可能甚至无法工作。我只希望 processData 在一个线程中运行(一次一个)并且主 while 循环继续运行,即使队列中有一个线程。
from threading import Thread
from win32event import CreateMutex
mutex = CreateMutex(None, False, "My Crazy Mutex")
while(1)
t = Thread(target=self.processData, args=(some_data,))
t.start()
mutex.lock()
def processData(self, data)
while(1)
if mutex.test() == False:
do some stuff
break
编辑:重新阅读我的代码,我发现它大错特错。但是,嘿,这就是我在这里寻求帮助的原因。
【问题讨论】:
-
很难弄清楚你想做什么。您需要更详细地解释您的意图。
-
@Marcelo Cantos,对不起,你可能是对的。我希望我在 processData 中的代码以新的方式开始。我只希望一个线程能够一次处理数据,并且按照发送数据的顺序来处理数据。我还希望主 while 循环在其他线程在队列中时继续循环。
-
@Richard:如果您打算序列化所有处理,为什么还要使用线程?一个简单的循环有什么问题?另外,为什么要让主线程继续循环?它只会消耗 CPU,可能会饿死其他线程。
-
@Marcelo Cantos,这不是我的实际程序。我的实际脚本已达到 500 多行代码,其中包括数据库条目和电子邮件。我希望主线程只读取一个串行端口,以便在处理接收到的数据之前填充缓冲区的可能性较小。如果我错了,请纠正我,但我认为这正是使用线程或多处理的地方
-
@Richard:这对主线程来说是有意义的,但是如果所有其他处理都将是顺序的,那么您可以只创建一个其他线程来完成所有其他工作。
标签: python multithreading mutex