Jay*_*Jay 6 python python-3.x python-multiprocessing
我正在尝试通过套接字连接打包和发送列数据。
为了加快速度,我考虑过将包装(struct.pack)分成多个过程。
为了避免两种方式的腌制,我认为最好由打包过程自己发送数据,因为据说可以从Python 3.4开始腌制套接字对象。
这是我正在工作的简化版本:
import socket
from multiprocessing import Pool
from struct import pack
# Start and connect a socket
s = socket.socket()
s.connect((ip, port))
# Data to be packed and sent in this order
data1 = 1, 2, 3, 4
data2 = 5, 6, 7, 8
data3 = 9, 10, 11, 12
# Top level column packer/sender for mp.pool
def send_column(column):
return s.send(pack(f'{len(column)}i', *column))
pool = Pool()
# Will this necessarily send the data in order?
pool.map(send_column, (data1, data2, data3))
Run Code Online (Sandbox Code Playgroud)
我的问题是-是否保证数据将按顺序发送?
如果没有,确保它的谨慎方法是什么?
我想到了一个全球计数器来检查流程是否已经轮到我了,但是我很高兴听到更好的想法。
小智 2
为了确保数据包按顺序传送,您需要确保发送的每个数据包对方都能收到,因此您只能使用同步连接(仅在发送前一个数据包之后发送数据包,并且您确保它是已收到)。在您的用例中,我建议您有一个进程池来生成腌制对象并将它们发送到队列(它们将是生产者)。另一个对象将是这些对象的使用者并通过网络发送它们。
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |