繁体   English   中英

再次使用Python中的线程

[英]Threads in Python again

伙计们!
我的应用程序是机器人。 它只是接收一条消息,对其进行处理并返回结果。
但是有很多消息,我正在创建单独的线程来处理每个消息,但这会使应用程序变慢(一点也不)。
那么,是否可以通过用其他方式替换线程来减少CPU使用率的任何方法?

您可能需要进程而不是线程。 在启动时生成进程,并使用管道与之对话。

http://docs.python.org/dev/library/multiprocessing.html

线程和进程具有相同的速度。 您的问题不是使用的是哪个,而是使用的是多少。

答案是只有一对固定的线程或进程。 说10。然后,您创建一个队列(使用队列模块)来存储来自机械手的所有消息。 这10个线程将一直工作,并且每次完成时,它们都在队列中等待新消息。

这样可以节省创建和销毁线程的开销。 有关更多信息,请参见http://docs.python.org/library/queue.html

def worker():
    while True:
        item = q.get()
        do_work(item)
        q.task_done()

q = Queue()
for i in range(num_worker_threads):
     t = Thread(target=worker)
     t.daemon = True
     t.start()

for item in source():
    q.put(item)

q.join()       # block until all tasks are done

您可以尝试仅创建有限数量的工人,并在他们之间分配工作。 Python的multiprocessing.Pool就是要使用的东西。

您甚至可能不需要线程。 如果您的服务器可以快速处理每个请求,则可以使用Twisted之类的命令使其成为单线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM