家伙!
我的应用程序是机器人。它只是接收一条消息,处理它并返回结果
但是有很多消息,我正在创建单独的线程来处理每个消息,但它使应用程序变慢(不是一点点)。
那么,是否可以通过用其他东西替换线程来减少CPU使用率?
答案 0 :(得分:3)
您可能想要进程而不是线程。在启动时生成进程,并使用Pipes与它们通信。
答案 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之类的所有内容进行单线程处理。