multiprocessing 相关问题

多处理是在单个计算机系统中使用两个或更多个中央处理单元(CPU)

在 PHP 中使用共享内存时出现异常错误(PHP 警告:shmop_open(): 无法附加或创建共享内存段“无效参数”)

我刚刚开始在PHP中使用共享内存来做一些事情。这是我的代码。 我刚刚开始在 PHP 中使用共享内存来做一些事情。这是我的代码。 <?php //limit the task to be forked $task = 100; $process_pool = array(); //allocate 1kb memory segment to store process_pool $process_pool_key = ftok(__FILE__,chr(0)); $process_pool_shm = shmop_open($process_pool_key,'c',0644,1024); $datas = array(); for($i = 1; $i<= $task; $i++) { $pid = pcntl_fork(); if ($pid == -1) { die("Can't fork child process."); } if ($pid == 0) { $current_pid = getmypid(); $process_pool_size = shmop_size($process_pool_shm); $process_pool = @unserialize(shmop_read($process_pool_shm,0,$process_pool_size)); //store child process data into specific memory $child_data = array('pid'=>$current_pid,"data"=>[rand(),'hello']); $child_key = ftok(__FILE__,chr($current_pid)); } $size = 1024*1024; $child_shm = shmop_open($child_key,'c',0644,$size); shmop_write($child_shm,serialize($child_data),0); exit(0); } else { $process_pool[$pid] = array($pid); shmop_write($process_pool_shm,serialize($process_pool),0); } } while(pcntl_waitpid(-1,$status) > 0); //Read data from all child process foreach($process_pool as $pid => $pid_info) { $tmp_key = ftok(__FILE__,chr($pid)); $size= 1024*1024; $tmp_shm = shmop_open($tmp_key,'a',0644,$size); $org_data = shmop_read($tmp_shm,0,$size); $child_data = @unserialize($org_data); if (empty($child_data)) { echo "$tmp_key\n"; } shmop_delete($tmp_shm); shmop_close($tmp_shm); if (!empty($child_data)) { $datas[$pid] = $child_data; } } var_dump(count($datas)); //var_dump(count($process_pool)); //var_dump(count(array_keys($datas))); //var_dump(count(array_keys($process_pool))); foreach (array_keys($process_pool) as $p_key) { if (!in_array($p_key,array_keys($datas))) { echo $p_key."\n"; } } shmop_delete($process_pool_shm); shmop_close($process_pool_shm); 上面的代码产生了多个子进程,子进程彼此持有自己的共享内存段。子进程的共享内存段用于存储处理后的数据。父进程会在处理后从子进程的共享内存段中收集数据子进程完成。 以我的拙见,这段代码应该运行没有任何问题。 但一些意想不到的问题随机出现。 有时进展顺利 /home/jhbian/pider/test/process/ReproduceProcessExample.php:60: int(100) 有时会崩溃 PHP Warning: shmop_open(): unable to attach or create shared memory segment 'Invalid argument' in /home/jhbian/pider/test/process/ReproduceProcessExample.php on line 29 PHP Stack trace: PHP 1. {main}() /home/jhbian/pider/test/process/ReproduceProcessExample.php:0 PHP 2. shmop_open() /home/jhbian/pider/test/process/ReproduceProcessExample.php:29 Warning: shmop_open(): unable to attach or create shared memory segment 'Invalid argument' in /home/jhbian/pider/test/process/ReproduceProcessExample.php on line 29 Call Stack: 0.0002 366568 1. {main}() /home/jhbian/pider/test/process/ReproduceProcessExample.php:0 0.0738 367872 2. shmop_open() /home/jhbian/pider/test/process/ReproduceProcessExample.php:29 PHP Warning: shmop_write() expects parameter 1 to be resource, boolean given in /home/jhbian/pider/test/process/ReproduceProcessExample.php on line 30 PHP Stack trace: PHP 1. {main}() /home/jhbian/pider/test/process/ReproduceProcessExample.php:0 PHP 2. shmop_write() /home/jhbian/pider/test/process/ReproduceProcessExample.php:30 Warning: shmop_write() expects parameter 1 to be resource, boolean given in /home/jhbian/pider/test/process/ReproduceProcessExample.php on line 30 Call Stack: 0.0002 366568 1. {main}() /home/jhbian/pider/test/process/ReproduceProcessExample.php:0 0.0755 368192 2. shmop_write() /home/jhbian/pider/test/process/ReproduceProcessExample.php:30 PHP Warning: shmop_read(): count is out of range in /home/jhbian/pider/test/process/ReproduceProcessExample.php on line 49 PHP Stack trace: PHP 1. {main}() /home/jhbian/pider/test/process/ReproduceProcessExample.php:0 PHP 2. shmop_read() /home/jhbian/pider/test/process/ReproduceProcessExample.php:49 Warning: shmop_read(): count is out of range in /home/jhbian/pider/test/process/ReproduceProcessExample.php on line 49 Call Stack: 0.0002 366568 1. {main}() /home/jhbian/pider/test/process/ReproduceProcessExample.php:0 0.1350 1551336 2. shmop_read() /home/jhbian/pider/test/process/ReproduceProcessExample.php:49 104785 /home/jhbian/pider/test/process/ReproduceProcessExample.php:60: int(99) 16896 谁能指出铰链在哪里? 当您已经创建了新的共享内存段并且由于某种原因 PHP 没有关闭它时,就会发生这种情况。 您需要使用“w”标志访问已创建的段 $shared_memory = @shmop_open($key, "c", 0644, 255); if (false === $shared_memory) { $shared_memory = shmop_open($key, "w", 0644, 255); } 嘿兄弟,我自己也遇到了这个问题,我找到了解决办法,只需在 C/C++ 中运行 ftok,PHP ftok 不起作用,因为它提供了不可靠的密钥编号,但是 C 可以,从 C 打印密钥程序的 ftok,将其复制并粘贴到您的 PHP shmop_open() 中,它对我来说非常有效。

回答 2 投票 0

在 Electron 中使用多线程/多处理进行文件操作的最佳方法

我正在编写一个应用程序,它从用户的文件系统加载各种文件和文件夹,从文件中获取一些数据(例如文件的图标),然后在应用程序中显示每个文件的信息...

回答 1 投票 0

使用多处理将列表项追加到字典中并行化

我有一个包含字符串的大列表。我希望从此列表中创建一个字典,以便: 列表 = [str1, str2, str3, ....] 字典 = {str1:len(str1), str2:len(str2), str3:len(str3),.....} 我去所以...

回答 1 投票 0

如何将对象传递给使用 Multiprocess.Process 创建的进程

我有一个包含两个方法的图像处理服务,我想使用 Python 中的多处理库并行执行这两个方法。 第一种方法调用 api 来获取图像

回答 1 投票 0

Python 多重处理:高效地仅保存最佳运行

我读了很多关于使用多处理模块进行并行化的文章,但没有一个能完全回答我的问题。 我有一个很长的生成器,为我提供参数值,对于每个我想要的......

回答 1 投票 0

Python多线程方法

我听说Python多线程有点棘手,我不确定实现我需要的最好方法是什么。假设我有一个名为 IO_intense_function 的函数,它可以执行以下操作

回答 2 投票 0

关于使用多处理模块并发执行进程的问题

我最近正在使用Python学习多重处理。 我了解到,我们在Python中使用多处理模块来实现并行性,这意味着进程是同时执行的......

回答 1 投票 0

如何在多处理中启动100个worker?

我正在尝试使用 python 调用我的函数 my_function() 100 次。由于 my_function 需要一段时间才能运行,因此我想并行化此过程。 我尝试阅读 https://docs.python 的文档......

回答 1 投票 0

来自 Abaqus/CAE 的 Python 多重处理

我正在使用名为 Abaqus/CAE1 的商业应用程序,带有内置的 Python 2.6 解释器和 API。我开发了一个长期运行的脚本,我试图将其拆分为同时、独立的

回答 3 投票 0

`OSError: [Errno 24] Too much open files` 在 ubuntu 24.04 终端上使用 python3.12.3 多处理

以下代码总是给我错误 OSError:[Errno 24]打开的文件太多 当执行的进程达到 508 个时,这意味着每个进程都打开两个文件描述符,然后我想...

回答 1 投票 0

如何在joblib中使用多处理锁?

我想使用后端多处理或 loky 在 joblib 中使用锁。使用标准库的多处理似乎很简单,但使用 joblib 则不然:它抱怨锁是......

回答 1 投票 0

如何管理自定义循环缓冲区数据类型中的共享内存?

我正在为以下任务编写程序 任务是编写一个创建两个进程的程序: a) '生产者进程将视频帧图像直接读取到共享内存环形缓冲区中...

回答 1 投票 0

Python中的子进程在使用队列时无法终止

首先,我对多重处理非常陌生。我正在尝试实现一个简单的相机模拟器,它将在子进程中生成图像并将它们放入队列中以供另一个子进程处理

回答 1 投票 0

如何将 Python 多重处理用于位置参数为零的函数?

这是一个例子: 导入多重处理 定义函数(): 对于范围(10)内的 i: 打印(一) 如果 __name__ == '__main__': p = 多处理.Pool(5) p.map(函数, ) 产生呃...

回答 3 投票 0

Python 多处理信号量文件超时堆积

我正在尝试 FastAPI 和 Docker,并且想做一些并行化。我使用多处理进行并行化,因为如果我愿意的话,暂停和恢复它们非常简单。 我做了一个终点

回答 1 投票 0

C++ 在不同进程之间共享atomic_int64_t?

我正在使用 C++ 多处理,使用共享内存将数据从一个进程传递到另一个进程。 我将一个数组放入共享内存中。进程A将数据复制到数组中,进程B将使用数据i...

回答 2 投票 0

Python共享内存,如何将随机整数放入共享内存块?

我创建了一个字节大小为10的内存块,并想创建一个随机数并将其放入内存块中,但它总是只给我错误消息,所以我想知道我是否做错了。 ...

回答 3 投票 0

使用 ProcessPoolExecutor 时 Pycharm 调试器中出现 BufferError

我在 FastAPI 应用程序中有以下代码(源自上一篇文章): 带自锁: 从并发.futures 导入 ProcessPoolExecutor 循环 = asyncio.get_running_loop...

回答 2 投票 0

Python 多处理导致 OSError: [Errno 24] 打开文件太多

编辑:我正在使用 pypy。 我正在尝试使用多处理模块中的 4 个工作进程池来并行化我的 python 脚本。这个错误似乎表明打开了太多管道,b...

回答 1 投票 0

如何在较大的循环内正确运行Python多处理池并在下一个循环开始之前将其关闭

我有一个大型脚本,正在处理网格格式的 TB 天气/气候数据。 我有一个使用外循环的脚本(多年来 - 1979 年到 2024 年),并且对于每一年,...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.