多线程与多进程又来啦啦啦

嘿哈~所有一切的第一,感谢谷溪老师的指导。记得一开始写多进程也是谷老师提(xi)议(nao)的。今天由业余级别编程高(cai)手(niao)来给大伙讲讲多线程,多进程这类程式的应用吧。

 

其实是再一次遇到了一个现实问题,实时行情API调取测速。一上手我写了个这个,

#from multiprocessing import Pool
from multiprocessing.dummy import Pool

import rqdatac
from aoaoao import *
import datetime

w.start()
rqdatac.init()

rq_stk_list_300 = rqdatac.index_components('000300.XSHG') #around 300
rq_stk_list_500 = rqdatac.index_components('000905.XSHG') #around 500
rq_stk_list_50  = rqdatac.index_components('000016.XSHG') #around 50
rq_stk_list_future = ['IC201812','IF201812','IH201812']
rq_stk_list = rq_stk_list_300 + rq_stk_list_500 + rq_stk_list_50 + rq_stk_list_future

wd_stk_list_01 = tesww("sectorconstituent","date=2018-09-19;windcode=000300.SH").Data
wd_stk_list_02 = tesww("sectorconstituent","date=2018-09-19;windcode=000016.SH").Data
wd_stk_list_03 = tesww("sectorconstituent","date=2018-09-19;windcode=000905.SH").Data
wd_stk_list_future = ['IC201812.CFE','IF201812.CFE','IH201812.CFE']
wd_stk_list = wd_stk_list_01 + wd_stk_list_02 + wd_stk_list_03 + wd_stk_list_future
 

def wind_time_stamp():

	data_start=datetime.datetime.now()
	data=qsww(wd_stk_list, "rt_date,rt_time,rt_last")
	data_end=datetime.datetime.now()
	print('wind',data_start,data_end)
	
	
def rq_time_stamp():

	data_start=datetime.datetime.now()
	data=rqdatac.current_snapshot(rq_stk_list)
	data_end=datetime.datetime.now()
	
	print('rq',data_start,data_end)
	

def fake_function(func): #假函数为了map分别调
	
	func()  
	
	
if __name__ == "__main__":
	
	func_list=[wind_time_stamp,rq_time_stamp]

	with Pool(2) as p:                                         
		p.map(fake_function, func_list)

其实最主要的精华是第一行和第二行,谷老师指出这个multiprocessing的一个妙哉,就是multiprocess 和 multiprocessing.dummy的切换。

你可以先多进程multiprocessing走一遍,再注释掉,用dummy走一遍。其他代码啥都不用改。以此比较到底谁快。

 

接下来是threading的登场,这货请注意尾部。

import threading

import rqdatac
from aoaoao import *
import datetime

w.start()
rqdatac.init()

rq_stk_list_300 = rqdatac.index_components('000300.XSHG') #around 300
rq_stk_list_500 = rqdatac.index_components('000905.XSHG') #around 500
rq_stk_list_50  = rqdatac.index_components('000016.XSHG') #around 50
rq_stk_list_future = ['IC201812','IF201812','IH201812']
rq_stk_list = rq_stk_list_300 + rq_stk_list_500 + rq_stk_list_50 + rq_stk_list_future

wd_stk_list_01 = tesw("sectorconstituent","date=2018-09-19;windcode=000300.SH").Data
wd_stk_list_02 = tesw("sectorconstituent","date=2018-09-19;windcode=000016.SH").Data
wd_stk_list_03 = tesw("sectorconstituent","date=2018-09-19;windcode=000905.SH").Data
wd_stk_list_future = ['IC201812.CFE','IF201812.CFE','IH201812.CFE']
wd_stk_list = wd_stk_list_01 + wd_stk_list_02 + wd_stk_list_03 + wd_stk_list_future
 

def wind_time_stamp():

	data_start=datetime.datetime.now()
	data=qsww(wd_stk_list, "rt_date,rt_time,rt_last")
	data_end=datetime.datetime.now()
	print('wind',data_start,data_end)
	
	
def rq_time_stamp():

	data_start=datetime.datetime.now()
	data=rqdatac.current_snapshot(rq_stk_list)
	data_end=datetime.datetime.now()
	
	print('rq',data_start,data_end)
	

threads = []

t1 = threading.Thread(target=wind_time_stamp)
threads.append(t1)
t2 = threading.Thread(target=rq_time_stamp)
threads.append(t2)
	
	
if __name__ == "__main__":
	
	for t in threads:
		#t.setDaemon(True)
		t.start()
		#t.join()
	
	t.join()

 

t.start()形同到了这两个function的开头,它们先很快的被开启,放到同一起跑线。最后一个t.join()形同一起开跑但是等待对方结束才退出。

 

据说还有fork思路fork出来一块内存一起跑,恕臣妾做不到,毕竟windows...不倒腾。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

取啥都被占用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值