再次使用Python中的线程

时间:2011-02-20 17:41:50

标签: python

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

4 个答案:

答案 0 :(得分:3)

您可能想要进程而不是线程。在启动时生成进程,并使用Pipes与它们通信。

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

答案 1 :(得分:1)

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

答案是只有一对固定的线程或进程。说10。 然后创建一个Queue(使用Queue模块)来存储机器人的所有消息。 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

答案 2 :(得分:0)

您可以尝试仅创建有限数量的工作人员并在他们之间分配工作。将使用Python的multiprocessing.Pool

答案 3 :(得分:0)

您甚至可能不需要线程。如果您的服务器可以快速处理每个请求,您可以使用Twisted之类的所有内容进行单线程处理。