python怎么从另一个线程里取数据_在一个线程中接收套接字数据,在另一个python中写入数据...

这篇博客介绍了如何在Python中实现线程间的数据共享,特别是从一个线程中读取套接字数据并在另一个线程中写入文件。通过使用`collections.deque`作为缓冲区,可以实现高效的数据传递,同时避免性能下降。示例代码创建了两个线程,一个负责从套接字读取数据并将其添加到缓冲区,另一个则从缓冲区中取出数据写入文件,直到缓冲区为空或终止信号发出。
摘要由CSDN通过智能技术生成

你需要有一个缓冲区,读线程和写线程从中读取。^{} from the ^{} module是完美的,因为它允许从任何一方追加/弹出而不会降低性能。在

所以,不要将dataChunk传递给线程,而是传递缓冲区。在import collections # for the buffer

import time # to ease polling

import threading

def write_to_file(path, buffer, terminate_signal):

with open(path, 'wb') as out_file: # close file automatically on exit

while not terminate_signal.is_set() or buffer: # go on until end is signaled

try:

data = buffer.pop() # pop from RIGHT end of buffer

except IndexError:

time.sleep(0.5) # wait for new data

else:

out_file.write(data) # write a chunk

def read_from_socket(sock, buffer, terminate_signal):

sock.settimeout(4)

try:

while True:

data, _ = sock.recvfrom(buf)

buffer.appendleft(data) # append to LEFT of buffer

except socket.timeout:

print "Timeout"

terminate_signal.set() # signal writer that we are done

sock.close()

buffer = collections.deque() # buffer for reading/writing

terminate_signal = threading.Event() # shared signal

threads = [

threading.Thread(target=read_from_socket, kwargs=dict(

sock=sock,

buffer=buffer,

terminate_signal=terminate_signal

)),

threading.Thread(target= write_to_file, kwargs=dict(

path="t1.txt",

buffer=buffer,

terminate_signal=terminate_signal

))

]

for t in threads: # start both threads

t.start()

for t in threads: # wait for both threads to finish

t.join()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值