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下多进程时全局变量在子进程怎么能更新?遇到从子进程更的主要内容,如果未能解决你的问题,请参考以下文章