python - 实现此线程的不同方法?

标签 python multithreading

我正在尝试 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/

相关文章:

python - 在非英文字符站点中抓取数据的问题 [Python]

python - 在 Python 中用空格分割字符串——保留带引号的子字符串

c++ - 如何使用 SDL2 为每个线程设置一个共享的 OpenGL 上下文?

android - 需要与 Android 中的后台进程和 Activity 进行双向通信 - 建议?

java - 使用 java.text.Collat​​or 并发排序时如何避免线程阻塞?

python - 为什么 user.is_authenticated 在注销后断言为真

Python,编写两个for循环之和的最佳方法

python - 在 VS Code 中重命名和重构 Python 文件

java - JSP 中的 session 变量

c++ - std::thread、类构造函数和析构函数