[问题]同时在一台电脑上执行server 与 client

楼主: polytrade (暴风雪)   2021-10-22 09:59:40
现在有两个独立的程式,程式码是来自Hilpisch的书籍"Python 算法交易"
第一个程式是 TickServer.py 它是利用模拟的方式自动产生金融商品的价格,并以socket的方式发布出去
程式如下:
import zmq
import math
import time
import random
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind('tcp://127.0.0.1:5555')
class InstrumentPrice(object):
def __init__(self):
self.symbol = 'SYMBOL'
self.t = time.time()
self.value = 100.
self.sigma = 0.4
self.r = 0.01
def simulate_value(self):
''' Generates a new, random stock price.
'''
t = time.time()
dt = (t - self.t) / (252 * 8 * 60 * 60)
dt *= 500
self.t = t
self.value *= math.exp((self.r - 0.5 * self.sigma ** 2) * dt +
self.sigma * math.sqrt(dt) * random.gauss(0,
1))
return self.value
ip = InstrumentPrice()
while True:
msg = '{} {:.2f}'.format(ip.symbol, ip.simulate_value())
print(msg)
socket.send_string(msg)
time.sleep(random.random() * 2)
第二个程式是 TickClient 它是做为第一个程式的应对程式,是用来接收它模拟产生的价格资讯
程式码如下:
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect('tcp://127.0.0.1:5555')
socket.setsockopt_string(zmq.SUBSCRIBE, 'SYMBOL')
while True:
data = socket.recv_string()
print(data)
透过第一个程式不断产生即时金融价格,就能模拟出商品即时交易的状态,然后第2个程式就能接收后用做后续的计算需要
现在我的问题是如何在同一台电脑上同时执行这两个程式,以便产生一个一边产生模拟价格,另一边即时不断的接收传来的价格资讯并能做后续处理的样子.
推测应该是要写第三个程式,所以我写了一个程式synchronize.py
程式码如下:
import multiprocessing
from TickServer import *
from TickClient import *
p1 = multiprocessing.Process(target=TickServer())
p2 = multiprocessing.Process(target=TickClient())
p1.start()
p2.start()
执行后,却没有显示出接收即时价格并打印出来的样子,但执行绪显示一直在执行,不知道我的想法与程式写法哪边有问题?
请教这个该如何改写?
作者: lycantrope (阿宽)   2021-10-22 10:42:00
用 docker用不同的cmd分别执行TickServer.py, TickClient.pyhttps://reurl.cc/XlZMZ0
作者: Woqeker (窝颗ker)   2021-10-22 11:48:00
两个分开执行就好 不需要写在同一个档案一起执行处理资料的流程应该直接改 client 的 print 部分

Links booklink

Contact Us: admin [ a t ] ucptt.com