我正在尝试并行执行我的工作,但我对多线程编程不熟悉,因此对具体实现感到困惑。
我有一个套接字监听器,将数据保存到缓冲区。当缓冲区达到容量时,需要将其数据保存到数据库中。 我想在一个线程上启动套接字监听器,在并行任务中检查缓冲区状态。
BufferQueue只是Python列表的扩展,具有允许检查列表是否达到指定大小的方法。
SocketManager是我正在监听的STREAM_URL的流数据提供程序。它使用回调函数处理消息。
但是,由于我使用回调来检索数据,因此我不确定使用共享变量是否是正确且最优的决策。
我有一个套接字监听器,将数据保存到缓冲区。当缓冲区达到容量时,需要将其数据保存到数据库中。 我想在一个线程上启动套接字监听器,在并行任务中检查缓冲区状态。
BufferQueue只是Python列表的扩展,具有允许检查列表是否达到指定大小的方法。
SocketManager是我正在监听的STREAM_URL的流数据提供程序。它使用回调函数处理消息。
但是,由于我使用回调来检索数据,因此我不确定使用共享变量是否是正确且最优的决策。
buffer = BufferQueue(buffer_size=10000)
def start_listening_to_sokcet(client):
s = SocketManager(client)
s.start_socket(cb_new)
s.start()
def cb_new(message):
print("New message")
global buffer
for m in message:
#save data to buffer
def is_buffer_ready(buffer):
global buffer
print("Buffer state")
if buffer.ready():
#save buffer data to db
如果您能帮我解决这个问题,我将不胜感激。
Lock
。 - PM 2RingBufferQueue
、SocketManager
等类型来自哪里,或者至少它们的作用是什么,那么很难提供任何不太模糊的东西。但我会对使用调用者必须定期检查(或更糟的是在自旋循环中)的is_buffer_ready
函数的任何API持谨慎态度;通常你会想要一些可以阻塞的东西。 - abarnert