使用python启动多个线程?
我正在尝试吞咽线程,并从本周的Python模块示例开始: 根据下面的代码使用python启动多个线程?,python,multithreading,Python,Multithreading,我正在尝试吞咽线程,并从本周的Python模块示例开始: 根据下面的代码 import threading def worker(arg=None): """thread worker function""" print 'Worker thread: %s\n' % arg return threads = [] for i in range(5): t = threading.Thread(target=worker, args=str(i), name=
import threading
def worker(arg=None):
"""thread worker function"""
print 'Worker thread: %s\n' % arg
return
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=str(i), name="threadingPrac")
threads.append(t)
t.start()
这是否意味着我开始5个线程
我刚开始学习线程,所以想更好地理解它。是的
在print语句之后添加import time
和time.sleep(5)
,以便更好地查看它
import threading
import time
def worker(arg=None):
"""thread worker function"""
print 'Worker thread: %s\n' % arg
time.sleep(5)
return
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=str(i), name="threadingPrac")
threads.append(t)
t.start()
是,您可以通过在代码底部添加此行来检查列表
线程的长度:
print len(threads)
输出:
5 #Number of threads
我不明白的是,这些线程并不是同时启动的,因为for循环一个接一个地执行每个线程,所以线程化有什么帮助呢?这是否意味着,当第一个线程启动,第二个线程在下一个迭代级别被调用时,第二个线程将与第一个线程并行执行,依此类推?也许您应该阅读一些关于线程的一般文本。你可以从……开始。是的,你是对的。每个后续线程将在每个循环中启动并执行其操作。Python受到吉尔的影响,因此您应该考虑仅在I/O绑定任务而不是计算任务的情况下使用线程。如果是计算任务并且想要实现并行处理,你应该使用多处理。你能给我举一个例子说明计算任务和线程失败吗?@san线程实际上并不是“失败”,而是因为全局解释器锁(GIL),大多数情况下,一次只能执行一个线程,即使您有多个CPU核。因此,在CPU受限的任务中使用线程通常不会比使用单个线程更快。它有时甚至比单个线程还要慢,因为在线程之间反复切换会产生额外的开销。当您想要并行化CPU限制的任务时,请使用多处理
,它使用多个进程而不是线程,因此不受GIL的影响。