我一直在尝试多线程我的代码,它仍然可以工作,但只使用了我的cpu的15% (我有8个线程,所以这是1个线程)。
我已经尝试了许多脚本从堆栈溢出和youtube多线程,但没有一个有效。
import threading
n=2
def crazy():
global n
while True:
n = n*2
print(n)
threads = []
for i in range(4):
t = threading.Thread(target=crazy)
threads.append(t)
t.start()输出结果与预期不谋而合,但仅在一个线程上运行。
发布于 2019-06-01 00:48:04
这实际上是在使用线程(总共4个)。您可以通过在代码中实现暂停来进行测试:
import threading
import time
n = 2
def crazy():
global n
while True:
n = n*2
print(n)
time.sleep(1) # pause
threads = []
for i in range(4):
t = threading.Thread(target=crazy)
threads.append(t)
t.start()它首先打印的位置是:
4
8
16
32然后第二次打印
64
128
256
512它以4个为一组打印的事实证明有4个线程正在运行,并且每个线程在执行过程中都遇到了暂停。如果你想最大化CPU的使用率,也许多处理更符合你想要的?threading只是模仿一次发生多件事情,而multiprocessing实际上让多件事情一次发生。请注意,多进程有点棘手,因为您必须聪明才能避免死锁。
发布于 2019-06-01 00:47:25
可能是这样的:
from multiprocessing.dummy import Pool
n = 2
def crazy(_):
global n
while True:
n = n * 2
print(n)
threads = []
pool = Pool(8)
pool.map(crazy, range(8))
pool.close()
pool.join()发布于 2019-06-01 00:54:24
这是在运行多个python线程,然而,python线程在应用程序级别,而不是内核。这些应用程序线程在同一核心上轮流运行,但它们实际上是上下文切换。例如,以此代码的输出为例。它在线程之间切换以打印数字:
import threading
n=0
def crazy(i):
global n
for i in range(4):
n = n + 1
print(f"Thread {i}: {n}")
threads = []
for i in range(4):
t = threading.Thread(target=crazy, args=(i,))
threads.append(t)
t.start()输出:
Thread 0: 1
Thread 1: 2
Thread 2: 3
Thread 3: 4
Thread 0: 5
Thread 1: 6
Thread 2: 7
Thread 3: 8
Thread 0: 9
Thread 1: 10
Thread 2: 11
Thread 3: 12
Thread 0: 13
Thread 1: 14
Thread 2: 15
Thread 3: 16https://stackoverflow.com/questions/56398862
复制相似问题