我是一个辅助翻译的机器人,以下是您需要翻译的内容:
我对Python还比较新,如果有不足之处请谅解。作为课程的一部分,我接触了量化金融的Python编程,并正在学习多进程并试图更好地理解它。我尝试修改给定的问题,现在我在思考中陷入困境。
问题:
我有一个函数可以用ohlc格式获取ticks。
{'scrip_name':'ABC','timestamp':1504836192,'open':301.05,'high':303.80,'low':299.00,'close':301.10,'volume':100000}
每分钟我希望同时进行以下计算,并且最好将其附加/插入到同一列表中:
- 找到最近5个收盘数据的移动平均值
- 找到最近5个开盘数据的中位数
- 将tick数据保存到数据库中。
因此,预期数据可能如下:
['scrip_name':'ABC','timestamp':1504836192,'open':301.05,'high':303.80,'low':299.00,'close':301.10,'volume':100000,'MA_5_open':300.25,'Median_5_close':300.50]
假设数据要进入数据库,编写一个简单的dbinsert例程到数据库中是相当容易的,我不认为这是一个巨大的挑战,我可以生成一个任务来执行每一分钟的插入语句。
如何在内存中保持5个时段以计算5个周期的简单平均移动平均线,并将它们推回字典/列表,同时同步3个不同的函数/进程(一个用于插入到db的函数,一个用于计算平均值的函数,一个用于计算中位数的函数)。
以下假设使我在编写多进程程序时感到困难。有人能指导我吗?我不想使用pandas dataframe。
====修订/更新====
我不想使用pandas/numpy的解决方案的原因是,我的目标是了解基础知识,而不是新库的细微差别。请不要误解我对理解的需求是傲慢或不愿接受建议。
拥有的优势
p1=Process(target=Median,arg(sourcelist))
p2=Process(target=Average,arg(sourcelist))
p3=process(target=insertdb,arg(updatedlist))
我希望你能帮助我理解基于功能/算法组件数量进行扩展过程的可能性。但是,我该如何确保p1和p2同步,而p3应在p1和p2之后执行?
multiprocessing.managers.SyncManager
(它是multiprocessing.managers.BaseManager
的子类)和它支持的类型的代理。话虽如此,使用multiprocessing.Queue
(不需要Manager
)通常会更好地提高性能。 - martineau