[問題]同時在一台電腦上執行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