Python运行函数,等待,终止函数,运行下一个函数

时间:2019-05-10 13:52:19

标签: python python-3.x pycharm interactive-brokers

我正尝试从IBAPI下载历史数据,由于我的编码并不那么精明,所以我提出了计划,为需要数据的每只股票编写单独的文件,并让1个主文件运行所有这些文件文件。 问题是我每次只能请求1个库存,因此在第一个库存完成下载后,我希望主文件运行下一个程序。

过去几天,我尝试了多种不同的方法,但由于某种原因Python无法杀死第一个脚本,因此我无法使其正常工作。

到目前为止,我已经尝试过:

import AAPL
import GOOG
import sys
import sleep

AAPL.main()
time.sleep(10)
sys.exit(AAPL)
GOOG.main()


以及

等功能的一些不同变体
terminate, kill()

奇怪的是,当我尝试共享的第一行代码时,却替换了

AAPL.main() & GOOG.main()

使用

print("Running") & print("terminate")

我的确收到了“ terminte”,但GOOG.main()并非如此

有人可以帮我解决这个问题吗?

编辑: AAPL.py的代码与GOOG.py相同:

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
import sys

def print_to_file(*args):
    with open('AAPL.txt', 'a') as fh:
        fh.write(' '.join(map(str,args)))
        fh.write('\n')
print = print_to_file


class TestApp(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)


    Layout = "{!s:1} {!s:2} {!s:3} {!s:4} {!s:5} {!s:6} {!s:7} {!s:8} {!s:8} '\n'"
    print(Layout.format("Ticker;", "Date;", "None;", "Time;", "Open;", "High;", "Low;", "Close;", "Volume"))


    def historicalData(self, reqId, bar):
        print("AAPL", ";", bar.date.replace(' ', '; '), ";", bar.open, ";", bar.high, ";", bar.low, ";", bar.close, ";", bar.volume)


def main():
    app = TestApp()

    app.connect("127.0.0.1", 7497, 0)

    contract = Contract ()
    contract.symbol = "AAPL"
    contract.secType = "STK"
    contract.exchange = "SMART"
    contract.currency = "USD"
    contract.primaryExchange = "NASDAQ"

    app.reqHistoricalData(0, contract, "20180201 10:00:00", "1 D", "1 min", "TRADES", 0, 1, False, [])

    app.run()

if __name__ == "__main__":
    main()

以独立方式运行将为我提供此库存所需的结果,但是因为它在几秒钟后仍未停止该功能,所以在我尝试多次运行时不起作用

2 个答案:

答案 0 :(得分:1)

尝试一下:

from multiprocessing import Process
import AAPL
import GOOG

if __name__ == "__main__":
    print("run AAPL")
    proc1 = Process(target = AAPL.main())
    proc1.start()
    print("run GOOG")
    proc2 = Process(target = GOOG.main())
    proc2.start()

答案 1 :(得分:0)

这应该足够了。

import AAPL
import GOOG

AAPL.main()
time.sleep(10) # not mandatory, could be eliminated
GOOG.main()

sys.exit将退出当前python的执行,这将不允许GOOG.main()执行。