python下多进程时全局变量在子进程怎么能更新?遇到从子进程更

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python下多进程时全局变量在子进程怎么能更新?遇到从子进程更相关的知识,希望对你有一定的参考价值。

请问,全局变量不在子进程里更新,但是在子进程使用的时候,全局变量没有变化

from collections import defaultdict
__global = 1
def a(x):
    g = __global
    print("x:".format(x))
    print("g:".format(g))
def b():
    global __global
    __global = 2
    with ProcessPoolExecutor(max_workers=1) as executor:
        executor.map(a, [1, 2])


if __name__ == '__main__':
    b()

参考技术A 在子进程引用声明变量的模块,然后直接用.引用就更新了 参考技术B 多线程的需要用 锁,
子进程(函数、类中需要使用 global声明全局变量)
如:
num=0 #全局
lockOne=threading.Lock()#对象不需要子函数中什么全局
def subPro():
global num
lockOne.acquire()
num+=1
lockOne.release()

...本回答被提问者和网友采纳
参考技术C 子进程Global 全局变量名?

linux 下多线程写文件

linux 下多线程给文件加排他锁

   利用flock 函数,具体用户请自己查。

  执行流程

1,创建 /dev/shm/test文件,并打开文件。

2,fork 一个子进程

     在子进程中再次打开文件,目的是不和父进程使用不一样的文件描述符。

3,父子进程各自给文件加排他锁并sleep10秒, 

   然后向文件中写入数据。

 代码如下

 

 1 /* slock.c */
 2 #include <unistd.h>
 3 #include <fcntl.h>
 4 #include <sys/types.h>
 5 #include <sys/stat.h>
 6 #include <string.h>
 7 #include <stdio.h> 
 8 int main()
 9 {
10  
11     int fd = open( "/dev/shm/test",O_CREAT|O_RDWR,S_IRWXU|S_IRGRP|S_IWGRP|S_IRWXO );
12     if ( fd < 0 )
13     {
14         puts( "open error" );
15         return -1;
16     }  
17    if (fork () == 0) {      
18        int fd1 = open( "/dev/shm/test",O_RDWR);     
19        if(flock(fd1,LOCK_EX)==0){
20            printf("pid(%d) %s",getpid(), "the file was locked  by child .\n");
21            puts( "child sleep now ..." );
22            sleep( 10 );
23            write(fd, "child\n",strlen("child\n"));
24            if(flock(fd1,LOCK_UN)==0){
25                 puts("child the file was unlocked .\n");
26             }     
27         }
28         close( fd1);
29         puts( "child exit..." );
30        
31     } else { 
32         if(flock(fd,LOCK_EX)==0){
33             printf("pid(%d) %s",getpid(), "the file was locked by parent .\n");  
34             puts( "parent sleep now ..." );
35             sleep( 10 );
36             write(fd, "parent\n",strlen("parent\n"));
37             if(flock(fd,LOCK_UN)==0){
38                 puts("parent the file was unlocked .\n");
39             }       
40         }    
41        
42         puts( "parent exit..." );
43         close( fd );
44     }
45     return 0;
46 }

执行结果

[[email protected]]# ./slockc
pid(1516) the file was locked by parent .
parent sleep now ...
parent the file was unlocked .

parent exit...
[[email protected]]# pid(1517) the file was locked  by child .
child sleep now ...
child the file was unlocked .

child exit...

 

最后查看   /dev/shm/test内容

parent
child















以上是关于python下多进程时全局变量在子进程怎么能更新?遇到从子进程更的主要内容,如果未能解决你的问题,请参考以下文章

python下多线程是鸡肋,推荐使用多进程 代码示例

Python多处理:我可以使用更新的全局变量重用进程(已经并行化的函数)吗?

linux 下多线程写文件

父进程全局变量如何复制到python多处理中的子进程

Python的多进程编程

Python编程面试常见问题都有哪些?