Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在进程之间共享日期变量-多进程python_Python_Python 3.x_Multiprocessing_Shared Memory - Fatal编程技术网

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

如何在进程之间共享日期变量-多进程python,python,python-3.x,multiprocessing,shared-memory,Python,Python 3.x,Multiprocessing,Shared Memory,我试图在多个进程之间共享日期变量,但在这样做时遇到了一些问题 有人能帮我解决这个问题吗 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())):

我试图在多个进程之间共享日期变量,但在这样做时遇到了一些问题

有人能帮我解决这个问题吗

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\u wchar\u p
是指针类型。尝试在进程之间共享会遇到以下问题:

注意:尽管可以在共享内存中存储指针,但请记住,这将引用特定进程地址空间中的位置。但是,指针在第二个进程的上下文中很可能无效,尝试从第二个进程取消引用指针可能会导致崩溃

摘自《圣经》

解决此问题的一种方法是使用
多处理.Array
而不是
多处理.Value

导入操作系统
导入多处理
导入日期时间
导入ctypes
def工作线程(num):
打印(数字[:],“日期”)
如果(num[:]==str(datetime.datetime.now().date()):
日期标志=0
其他:
日期标志=1
num[:]=str(datetime.datetime.now().date())
print('这是子项',os.getpid())
num=多处理.Array(ctypes.c_wchar,'2000-01-01')
打印(数字[:])
p1=多处理。进程(目标=工作者,参数=(num,))
p2=多处理。进程(目标=工作者,参数=(num,))
p1.开始()
p2.start()
p1.join()
p2.join()
打印(数字[:])
使用此方法需要注意的一点是,生成的数组具有固定大小,因此如果不事先指定大小(通过相应地设置
数组
初始化器中的第二个参数),您将无法在其中存储任意长的字符串。但是,当您使用日期字符串时,这应该很好,因为它们都具有相同的长度


另请注意使用
num[:]
(即
\uuu getslice\uuu
\uu setslice\uuu
)而不是
num.value
ctypes.c\u wchar\u p
是指针类型。尝试在进程之间共享会遇到以下问题:

注意:尽管可以在共享内存中存储指针,但请记住,这将引用特定进程地址空间中的位置。但是,指针在第二个进程的上下文中很可能无效,尝试从第二个进程取消引用指针可能会导致崩溃

摘自《圣经》

解决此问题的一种方法是使用
多处理.Array
而不是
多处理.Value

导入操作系统
导入多处理
导入日期时间
导入ctypes
def工作线程(num):
打印(数字[:],“日期”)
如果(num[:]==str(datetime.datetime.now().date()):
日期标志=0
其他:
日期标志=1
num[:]=str(datetime.datetime.now().date())
print('这是子项',os.getpid())
num=多处理.Array(ctypes.c_wchar,'2000-01-01')
打印(数字[:])
p1=多处理。进程(目标=工作者,参数=(num,))
p2=多处理。进程(目标=工作者,参数=(num,))
p1.开始()
p2.start()
p1.join()
p2.join()
打印(数字[:])
使用此方法需要注意的一点是,生成的数组具有固定大小,因此如果不事先指定大小(通过相应地设置
数组
初始化器中的第二个参数),您将无法在其中存储任意长的字符串。但是,当您使用日期字符串时,这应该很好,因为它们都具有相同的长度

另请注意使用
num[:]
(即
\uuuu getslice\uuuu
\uuu setslice\uuu
)而不是
num.value