我正在尝试 python 中的线程。我希望在另一种方法运行时显示旋转光标(5-10 分钟)。我已经完成了一些代码,但我想知道你会怎么做?我不喜欢使用全局变量,所以我认为有更好的方法吗?
c = True
def b():
for j in itertools.cycle('/-\|'):
if (c == True):
sys.stdout.write(j)
sys.stdout.flush()
time.sleep(0.1)
sys.stdout.write('\b')
else:
return
def a():
global c
#code does stuff here for 5-10 minutes
#simulate with sleep
time.sleep(2)
c = False
Thread(target = a).start()
Thread(target = b).start()
编辑:
现在的另一个问题是,当处理结束时,旋转光标的最后一个元素仍在屏幕上。所以打印了类似 \
的内容。
最佳答案
您可以使用事件: http://docs.python.org/2/library/threading.html
我测试了这个并且它有效。它还使所有内容保持同步。您应该避免在不同线程中更改/读取相同的变量而不同步它们。
#!/usr/bin/python
from threading import Thread
from threading import Event
import time
import itertools
import sys
def b(event):
for j in itertools.cycle('/-\|'):
if not event.is_set():
sys.stdout.write(j)
sys.stdout.flush()
time.sleep(0.1)
sys.stdout.write('\b')
else:
return
def a(event):
#code does stuff here for 5-10 minutes
#simulate with sleep
time.sleep(2)
event.set()
def main():
c = Event()
Thread(target = a, kwargs = {'event': c}).start()
Thread(target = b, kwargs = {'event': c}).start()
if __name__ == "__main__":
main()
与“kwargs”相关,来自 Python 文档(帖子开头的 URL):
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
...
kwargs is a dictionary of keyword arguments for the target invocation. Defaults to {}.
关于python - 实现此线程的不同方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16518142/