[問題]同時在一台電腦上執行server 與 client

看板Python作者 (暴風雪)時間3年前 (2021/10/22 09:59), 編輯推噓4(401)
留言5則, 2人參與, 3年前最新討論串1/1
現在有兩個獨立的程式,程式碼是來自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() 執行後,卻沒有顯示出接收即時價格並列印出來的樣子,但執行緒顯示一直在執行,不知道我的想法與程式寫法哪邊有問題? 請教這個該如何改寫? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.160.130 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1634867982.A.FA5.html

10/22 10:42, 3年前 , 1F
用 docker
10/22 10:42, 1F

10/22 10:50, 3年前 , 2F
用不同的cmd分別執行TickServer.py, TickClient.py
10/22 10:50, 2F

10/22 10:59, 3年前 , 3F

10/22 11:48, 3年前 , 4F
兩個分開執行就好 不需要寫在同一個檔案一起執行
10/22 11:48, 4F

10/22 11:48, 3年前 , 5F
處理資料的流程應該直接改 client 的 print 部分
10/22 11:48, 5F
文章代碼(AID): #1XSXiE-b (Python)
文章代碼(AID): #1XSXiE-b (Python)