Python 每x秒加载一次dict,然后传递给df并清除dict

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

我正在尝试每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.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