如何解决在python中运行多个线程时,为什么打印混乱?
我决定运行十个线程。它们正确运行,没有错误,但是每打印一次,结果在同一行上有多行。
import threading
import time
def do_something():
print("Sleeping...")
time.sleep(1)
print("Done sleeping.")
threads = []
for _ in range(10):
t = threading.Thread(target=do_something)
t.start()
threads.append(t)
for thread in threads:
thread.join()
我得到奇怪的输出:
Sleeping...
Sleeping...
Sleeping...
Sleeping...
Sleeping...
Sleeping...
Sleeping...
Sleeping...
Sleeping...
Sleeping...
Done sleeping.Done sleeping.
Done sleeping.
Done sleeping.Done sleeping.
Done sleeping.Done sleeping.
Done sleeping.Done sleeping.
Done sleeping.
有人知道为什么会这样吗,我该如何解决?
解决方法
除非使用锁,否则无法同步线程打印。
import threading
import time
def do_something():
lock.acquire()
thread_name = threading.current_thread().name
print(str(thread_name)+" Sleeping...")
time.sleep(1)
print(str(thread_name)+" Done sleeping.")
lock.release()
threads = []
lock = threading.Lock()
for _ in range(10):
t = threading.Thread(target=do_something)
t.start()
threads.append(t)
for thread in threads:
thread.join()
,
我认为依靠线程写stdout不是一个好主意。 如果您想要干净的输出,最好在主线程/进程中处理stdout。
这是线程池的示例。这是清理输出的一种方法:
import time
from multiprocessing.pool import ThreadPool
def do_something(n):
time.sleep(1)
return n
pool = ThreadPool()
jobs = [1,2,3]
print(f"starting jobs: {jobs}")
for result in pool.imap_unordered(do_something,jobs):
print(f"Job Completed: {result}")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。