python - 线程类不会启动或初始化
问题描述
我正在尝试创建一个每隔一定时间写入 CSV 的 ZMQ 订阅者(时间并不重要)。
我遇到的问题是我的 write_csv1 类甚至没有启动或初始化,并且我的 ZMQ 线程类的初始化代码是相同的。在我添加 threading.Condition 和 c.acquires/c.release 之前它正在工作。
任何提示或指示都会很棒。
import zmq
import pandas as pd
import time
import threading
c = threading.Condition()
df = pd.DataFrame()
s = 0
m = 0
h = 0
d = 0
def counter():
global h,s,m,d
while True:
s += 1
print("Second:{}".format(s))
if s >=60:
m +=1
s = 0
if m >= 60:
h += 1
m = 0
if h >= 24:
d += 1
h = 0
time.sleep(1)
class write(threading.Thread):
def __init__(self,name):
threading.Thread.__init__(self)
self.name = name
def write_csv(self):
global df
while True:
print('sleeping')
time.sleep(12)
c.acquire()
print('acquired')
print(df)
with open("FILE", 'a') as f:
df.to_csv(f, encoding = 'utf-8', index = False, header = False)
c.release()
z = zmq_thread()
z.run()
class zmq_thread(threading.Thread):
def __init__(self,name):
threading.Thread.__init__(self)
self.name = name
def run(self):
global df
print('DF Created')
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:#####")
socket.setsockopt_string(zmq.SUBSCRIBE, 'TOPIC')
print('socket connected')
count = 0
while True:
c.acquire()
try:
count +=1
if count == 10:
print('ZMQ Break')
c.notify_all()
c.release()
print('Lock released')
return df
message = socket.recv_string()
message2 = socket.recv_string()
if message == 'TOPIC':
message2_split = message2.split(",")
message4 = pd.Series(message2_split)
df = df.append(message4, ignore_index=True)
print('ZMQ Running')
except KeyboardInterrupt:
break
counter = threading.Thread(target = counter)
write_csv1 = write("Write_csv")
zmq_loop = zmq_thread('Start_ZMQ')
counter.start()
write_csv1.start()
zmq_loop.start()
解决方案
问题是你没有run()
在写类上实现方法。您需要重命名write_csv(self)
为run(self)
推荐阅读
- unity3d - SpriteRenderer 在第二次设置时不显示精灵
- sql - SQL 连接两个表并检查两个表中的每个值是否存在
- reactjs - 不能在组件中使用道具
- reactjs - Swiper React 鼠标滚轮滚动和键盘控制不起作用
- android - 在 kotlin 新手中设置特定日期和时间的通知
- arrays - 捕获http json主体响应并转换为角度ionic5中的数组
- javascript - 如何在控制台中显示变量不断变化的值?
- flutter - 如何从颤动的不同屏幕访问变量值?
- pointers - 如何将 Rust 结构的引用/指针传递给 C ffi 接口?
- javascript - 使用最接近()比较元素与点击事件的距离