Python 每x秒加载一次dict,然后传递给df并清除dict
我正在尝试每5秒将值写入字典,持续1分钟。然后,我想将这些值放入一个数据框中,写入csv并清除原始字典,然后继续Python 每x秒加载一次dict,然后传递给df并清除dict,python,Python,我正在尝试每5秒将值写入字典,持续1分钟。然后,我想将这些值放入一个数据框中,写入csv并清除原始字典,然后继续 import time import random from multiprocessing import Process a = {'value':[], 'timeStamp': []} def func1(): global a print "starting First Function" a['value'].append(random.rand
import time
import random
from multiprocessing import Process
a = {'value':[], 'timeStamp': []}
def func1():
global a
print "starting First Function"
a['value'].append(random.randint(1,101))
a['timeStamp'].append(time.time()*1000.0)
time.sleep(5)
return a
def func2():
print "starting Second Function"
time.sleep(60)
d = pd.DataFrame(a)
print d
# here i would write out the df to csv and del d
a.update({}.fromkeys(a,0))
print "cleared"
if __name__=='__main__':
while True:
p1 = Process(target = func1)
p1.start()
p2 = Process(target = func2)
p2.start()
p1.join()
p2.join()
print "test"
print a
这就是我现在所处的位置,这可能是正确的方法,也可能不是。无论如何,这段代码并没有给出正确的结果。我正试图找出最好的方法,让dict进入df并清除它。希望有人做过类似的事情?您的代码有太多问题,几乎不适合任何用途。您可以从以下内容开始研究(python 3,线程而不是进程): 输出为:
starting First Function
starting Second Function
{'value': [32, 95, 2, 71, 65], 'timeStamp': [1536244351577.3914, 1536244352584.13, 1536244353586.6367, 1536244354589.3767, 1536244355591.9202]}
cleared
{'value': [43, 44, 28, 69, 25], 'timeStamp': [1536244356594.6294, 1536244357597.2498, 1536244358599.9812, 1536244359602.9592, 1536244360605.9316]}
cleared
stopping Second Function
stopping First Function
进程不共享内存-每个函数修改一个单独的
a
。因此,在功能和主流程之间看不到变化
要在函数之间共享内存,请改用线程
模块。您可以在示例中通过将进程
替换为线程
来测试这一点:
from threading import Thread as Process
这允许您运行示例,否则将保持不变
请注意,Python中的
threading
受以下限制:。线程并行运行,但不是并行运行——Python代码只在一个内核上运行。但是,诸如time.sleep
等扩展和系统调用以及pandas
的底层数据结构可以避免这种情况。您是否意识到a
不是在进程之间共享的?你不使用线程有什么原因吗?阅读线程文档实际上让我明白了很多,我想我是想得太多了。我用线程重写,它更简单。谢谢
from threading import Thread as Process