我有两个功能,draw_ascii_spinner
和findCluster(companyid)
。
我想:
findCluster(companyid)
并进行处理.... draw_ascii_spinner
直到findCluster(companyid)
完成我如何开始尝试解决此问题(Python 2.7)?
答案 0 :(得分:11)
使用线程:
import threading, time
def wrapper(func, args, res):
res.append(func(*args))
res = []
t = threading.Thread(target=wrapper, args=(findcluster, (companyid,), res))
t.start()
while t.is_alive():
# print next iteration of ASCII spinner
t.join(0.2)
print res[0]
答案 1 :(得分:7)
您可以使用multiprocessing。或者,如果findCluster(companyid)
有明智的停止点,您可以将其与draw_ascii_spinner
一起转换为生成器,以执行以下操作:
for tick in findCluster(companyid):
ascii_spinner.next()
答案 2 :(得分:2)
通常,您将使用线程。这是一个简单的方法,假设只有两个线程:1)执行task
的主线程,2)微调线程:
#!/usr/bin/env python
import time
import thread
def spinner():
while True:
print '.'
time.sleep(1)
def task():
time.sleep(5)
if __name__ == '__main__':
thread.start_new_thread(spinner, ())
# as soon as task finishes (and so the program)
# spinner will be gone as well
task()
答案 3 :(得分:1)
这可以通过线程来完成。 FindCluster在一个单独的线程中运行,完成后,它可以简单地发信号通知另一个轮询进行回复的线程。
答案 4 :(得分:1)
你想要对线程做一些研究,一般形式就是这个
这是Python的简短教程 - http://linuxgazette.net/107/pai.html
答案 5 :(得分:0)
在一个线程中运行findCluster()
(Threading模块使这很简单),然后draw_ascii_spinner
直到满足某些条件。
您可以等待线程的sleep()
超时,而不是使用wait()
来设置微调器的速度。