gpt4 book ai didi

python - 如何在进程之间共享日期变量 - Multiprocessing python

转载 作者:太空宇宙 更新时间:2023-11-03 20:04:12 29 4
gpt4 key购买 nike

我正在尝试在多个进程之间共享日期变量,但我在执行此操作时遇到了一些问题,

在这种情况下有人可以帮助我吗?

import os
import multiprocessing
from multiprocessing import Value
import datetime
import ctypes
def worker(num):
print(num.value,'date')
if(str(num.value) == str(datetime.datetime.now().date())):
date_flag = 0
else:
date_flag = 1
num.value = str(datetime.datetime.now().date())
print('this is child',os.getpid())

num = multiprocessing.Value(ctypes.c_wchar_p, '2000-01-01')
print(num.value)

p1 = multiprocessing.Process(target=worker,args=(num,))
p2 = multiprocessing.Process(target=worker,args=(num,))
p1.start()
p2.start()
p1.join()
p2.join()

我在进程启动时分配默认日期,如果系统日期与默认日期不匹配,则日期变量应该覆盖,并且它应该能够访问所有其他进程。

最佳答案

ctypes.c_wchar_p 是指针类型。尝试在进程之间共享它会遇到以下问题:

Note: Although it is possible to store a pointer in shared memory remember that this will refer to a location in the address space of a specific process. However, the pointer is quite likely to be invalid in the context of a second process and trying to dereference the pointer from the second process may cause a crash.

取自 multiprocessing documentation .

解决此问题的一种方法是使用 multiprocessing.Array 而不是 multiprocessing.Value:

import os
import multiprocessing
import datetime
import ctypes

def worker(num):
print(num[:],'date')
if(num[:] == str(datetime.datetime.now().date())):
date_flag = 0
else:
date_flag = 1
num[:] = str(datetime.datetime.now().date())
print('this is child',os.getpid())

num = multiprocessing.Array(ctypes.c_wchar, '2000-01-01')
print(num[:])

p1 = multiprocessing.Process(target=worker,args=(num,))
p2 = multiprocessing.Process(target=worker,args=(num,))
p1.start()
p2.start()
p1.join()
p2.join()

print(num[:])

使用此方法需要注意的一件事是,结果数组具有固定大小,因此如果不提前指定大小,您将无法在其中存储任意长的字符串(通过相应地设置 Array 初始化程序中的第二个参数)。但是,当您使用日期字符串时,这应该没问题,因为它们都具有相同的长度。

另请注意使用 num[:](即 __getslice____setslice__)而不是 num.value >.

关于python - 如何在进程之间共享日期变量 - Multiprocessing python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59068959/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com