python多进程共享内存失败,共享数组无法在进程内赋值 5C

问题描述:
在运行socket之后,共享内存的方法就失效了,同样尝试了内存映射mmap,
同样无法成功运行。
首先进程一需要接受来自网口的数据,数据是实时发送的,信息密度较大,所
以想尝试多进程并发提高运行速度,但python中socket和内存操作产生了冲突
,墙内墙外都没有调查到相关的问题,有人可以帮忙解答下么?管道的方式太
慢了,数据大约每秒30个包,一个包1905个字节。
有什么方法可以解决这个问题么?

2个回答

起码先要看看你是如何尝试的,具体的错误信息是什么。

如果真的共享的数据比较大,那么可以直接考虑内存数据库等,比如redis,通过它来进行数据写入,读取

qq_23934639
qq_23934639 代码我重新在评论里插入了,windows下pycharm和cmd下调试都有问题
大约 2 年之前 回复
qq_23934639
qq_23934639 from multiprocessing import Process,Array import time from socket import * server=socket(AF_INET,SOCK_STREAM) server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) server.bind(('',49153)) server.listen(5) def fun(m,n): conn, client_addr = server.accept() m[1] = 88 if __name__ == '__main__': m = Array('i', 5) p = Process(target=fun, args=(m, 5)) p.start() time.sleep(1) print(m[1]) p.join()
大约 2 年之前 回复
qq_23934639
qq_23934639 这是代码,比较简单,创建了套接字以后赋值后结果还是0
大约 2 年之前 回复
qq_23934639
qq_23934639 from multiprocessing import Process,Array import time from socket import * server=socket(AF_INET,SOCK_STREAM) server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) server.bind(('',49153)) server.listen(5) def fun(m,n): conn, client_addr = server.accept() m[1] = 88 if __name__ == '__main__': m = Array('i', 5) p = Process(target=fun, args=(m, 5)) p.start() time.sleep(1) print(m[1]) p.join()
大约 2 年之前 回复
qq_23934639
qq_23934639 from multiprocessing import Process,Array
大约 2 年之前 回复
qq_23934639
qq_23934639 非常感谢您的回复!redis下午尝试了一下,好像对windows并不友好,短期项目不会搬到linux了
大约 2 年之前 回复
qq_23934639
qq_23934639 不报错,就是在调用socket的进程里无法更改共享内存内数组的值,代码可以运行,但创建一个套接字以后共享内存内的数组的值就都是0了。
大约 2 年之前 回复
 from multiprocessing import Process,Array
import time
from socket import *

server=socket(AF_INET,SOCK_STREAM)
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
server.bind(('',49153))
server.listen(5)

def fun(m,n):
    conn, client_addr = server.accept()
    m[1] = 88
if __name__ == '__main__':
    m = Array('i', 5)
    p = Process(target=fun, args=(m, 5))
    p.start()
    time.sleep(1)
    print(m[1])
    p.join()
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐