Python 真正的程序员如何实现服务器循环?
每次运行这个程序时,我都听到我的cpu风扇在加速。我怀疑代码中循环时的繁忙等待是原因。我想知道一个真正的程序员将如何优化这个Python 真正的程序员如何实现服务器循环?,python,multithreading,Python,Multithreading,每次运行这个程序时,我都听到我的cpu风扇在加速。我怀疑代码中循环时的繁忙等待是原因。我想知道一个真正的程序员将如何优化这个 from multiprocessing import Process, Queue import threading class PThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) #view leave will set t
from multiprocessing import Process, Queue
import threading
class PThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
#view leave will set this event
self.event = threading.Event()
def run(self):
while 1:
if not self.event.is_set():
print 'run'
else:
break
def server_control(queue):
while True:
try:
event = queue.get(False)
except:
event = None
if event == 'DETECTED':
print 'DETECTED'
t = PThread()
t.start()
elif event == 'LEAVE':
print 'Viewer_left'
t.event.set()
t.join()
elif event == 'QUIT':
break
q=Queue()
p = Process(target=server_control, args=(q,))
p.start()
p.join()
如果线程需要等待事件,那么它应该一直休眠到事件发生,而不是忙着等待。事件对象有一个
wait()。调用它,它将不会返回,直到其他线程对事件调用了set()
(或者如果您指定了超时,则超时已过)。同时,线程不使用CPU。通过在循环中添加time.sleep(0)
,将剩余的量传递给另一个线程,可以使循环稍微不那么紧凑
另请参见:多处理模块具有线程事件对象的克隆
from multiprocessing import Process, Event
而不是使用队列。您应该在主进程中声明感兴趣的事件,并将它们传递给其他进程
就你而言:
detected = Event()
leave = Event()
exit = Event()
Process(target=server_control, args=(detected, leave, exit))
最后检查事件是否已触发或在循环中等待