首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的代码不能在多个线程上运行?

为什么我的代码不能在多个线程上运行?
EN

Stack Overflow用户
提问于 2019-06-01 00:40:52
回答 4查看 140关注 0票数 0

我一直在尝试多线程我的代码,它仍然可以工作,但只使用了我的cpu的15% (我有8个线程,所以这是1个线程)。

我已经尝试了许多脚本从堆栈溢出和youtube多线程,但没有一个有效。

代码语言:javascript
运行
复制
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()

输出结果与预期不谋而合,但仅在一个线程上运行。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-06-01 00:48:04

这实际上是在使用线程(总共4个)。您可以通过在代码中实现暂停来进行测试:

代码语言:javascript
运行
复制
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()

它首先打印的位置是:

代码语言:javascript
运行
复制
4
8
16
32

然后第二次打印

代码语言:javascript
运行
复制
64
128
256
512

它以4个为一组打印的事实证明有4个线程正在运行,并且每个线程在执行过程中都遇到了暂停。如果你想最大化CPU的使用率,也许多处理更符合你想要的?threading只是模仿一次发生多件事情,而multiprocessing实际上让多件事情一次发生。请注意,多进程有点棘手,因为您必须聪明才能避免死锁。

票数 0
EN

Stack Overflow用户

发布于 2019-06-01 00:47:25

可能是这样的:

代码语言:javascript
运行
复制
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()
票数 0
EN

Stack Overflow用户

发布于 2019-06-01 00:54:24

这是在运行多个python线程,然而,python线程在应用程序级别,而不是内核。这些应用程序线程在同一核心上轮流运行,但它们实际上是上下文切换。例如,以此代码的输出为例。它在线程之间切换以打印数字:

代码语言:javascript
运行
复制
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()

输出:

代码语言:javascript
运行
复制
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: 16
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56398862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档