当前位置: 首页 > 知识库问答 >
问题:

了解多线程无法读取全局变量的原因

仲元凯
2023-03-14

使用脚本上焦点中定义的全局变量

t0=时间。时间是全球性的

这个函数呢

返回("["str(time.time()-t0) "] ") ## 从初始开始的时间戳

我正在尝试使用

打印(时间戳(t0)”。。。无论什么"")

这是可行的,但是当我通过

thread_id范围(win32-safe_os):
... p=进程(目标=fonction,args=((thread_id),测试))
...p.start()
...thread_list.append(p)

为了

打印(时间戳(t0)加载核心str(thread_id))
打印(时间戳(t0)str(filetodo)str(thread_id))
打印(时间戳(t0)str(filetodo)str(<--plhd--2/>)

我得到这个标准:

[2.70299983025]297 jpg/36087文件
[2.75]进入多线程
[2.75]Win32找到:2个内核
[0.0]加载内核0
[0.0]测试内核0
[0.0]自由内核0
[0.0]加载内核1
[0.0]测试内核1
[0.0]自由内核1

我可以看到,我的时间戳()和t0调用工作,但不是在p.start()。我想知道如何(和为什么)我需要纠正?

附言:我试着利用时间。时钟,但在win32中它指的是线程的开始(不是脚本)/

共有2个答案

武骁
2023-03-14

以下代码

import time
from multiprocessing import Process

t0 = time.time() ## is global

def timestamp(t0):
    return ("[" + str(time.time()-t0)+ "] ") ## time stamping from initial start

def fonction(thread_id, filetodo):
    print(timestamp(t0)+"Load core "+str(thread_id))
    print(timestamp(t0)+str(filetodo)+" on core "+str(thread_id))
    print(timestamp(t0)+"Free core "+str(thread_id))

thread_list = []
for thread_id in range(2):
    p = Process(target=fonction, args=((thread_id),"test"))
    p.start()
    thread_list.append(p)

...在我的Linux机器上的输出:

[0.00588583946228] Load core 0
[0.00625395774841] test on core 0
[0.00644302368164] Free core 0
[0.007572889328] Load core 1
[0.00768899917603] test on core 1
[0.00770998001099] Free core 1

所以这是可以的。你能发送更完整的代码片段吗?

淳于知
2023-03-14

每个进程都有一个单独的全局变量实例。如果希望每个进程看到相同的值,则需要将该值作为参数传递给每个进程。

 类似资料:
  • 本文向大家介绍Python局部变量与全局变量区别原理解析,包括了Python局部变量与全局变量区别原理解析的使用技巧和注意事项,需要的朋友参考一下 1、局部变量 输出: before change: Yang Li after change 你好 在外面看看name改了么? Yang Li 2、全局变量 输出: 3、nonlocal 全局与局部变量 在子程序中定义的变量称为局部变量,在程序的一开始

  • 问题内容: 如何与线程共享全局变量? 我的Python代码示例是: 我不知道如何让两个线程共享一个变量。 问题答案: 您只需要在中声明为global ,这样就无需修改该函数本地的。 在中,您不需要执行任何特殊操作,只要您不尝试修改的值(这将创建一个局部变量以遮盖全局变量;请在需要时使用)>

  • 下面是代码: null null 当我点击乘法或除法按钮触发函数时,我得到的结果是NAN,但我认为num1和num2都是全局变量,有人能帮我弄清楚为什么这两个都没有定义吗?

  • 问题内容: 我有一个关于可变范围的问题。 例如: 现在,我创建两个线程,并为每个线程创建一个实例。 当我在每个线程中调用时,可以保证线程安全吗? 本地变量存储在哪里?每个线程的堆栈?堆空间? PS我知道在这种情况下,静态是毫无意义的。我在我们的旧代码中找到了它;我只是想确定我所知道的! 问题答案: 局部变量存储在每个线程自己的堆栈中。这意味着局部变量永远不会在线程之间共享。这也意味着所有本地原始变

  • 如果你要多于一个函数共用一个简单的变量,简单的处理方法就是把这个变量在所有函数中定义为global全局变量。在命令行做同样的事情,如果你要工作空间访问上述变量。这个全局变量的定义必须出现在变量被应用于一个函数之前。虽然不是要求,但全局变量也最好以大写字母开头,这样可以同其他变量区别出来。举个例子,做一个以falling.m命名的M-文件。 function h = falling(t) globa