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

Python运行函数,等待,终止函数,运行下一个函数,python,python-3.x,pycharm,interactive-brokers,Python,Python 3.x,Pycharm,Interactive Brokers,我正试图从IBAPI下载历史数据,由于我对编码不是很在行,所以我想出了一个计划,为我想要数据的每个股票编写单独的文件,并让一个主文件运行所有这些文件。 问题是,我每次只能请求1只股票,所以在第一只股票完成下载后,我希望主文件运行下一个程序 在过去的几天里,我尝试了多种不同的方法,但由于某种原因,Python并没有杀死第一个脚本,所以我无法让它工作 到目前为止,我所尝试的: import AAPL import GOOG import sys import sleep AAPL.main() t

我正试图从IBAPI下载历史数据,由于我对编码不是很在行,所以我想出了一个计划,为我想要数据的每个股票编写单独的文件,并让一个主文件运行所有这些文件。 问题是,我每次只能请求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()

我确实收到了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()
作为一个独立的运行将为我提供仅此股票所需的结果,但由于它不会在几秒钟后停止该功能,因此当我尝试运行多个时,它不起作用,这应该足够了

import AAPL
import GOOG

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

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

尝试以下操作:

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()

一切都取决于主要功能的外观。如果AAPL.main不能自行返回,则在单线程设置中无法对其执行任何操作。可能AAPL和GOOG中的main函数根本不会返回。请提供这两个文件的主代码。或者只使用线程,因为线程可以同时运行。谢谢你的回答,我将更新我的帖子并添加AAPL文件,这与GOOGI更新我的帖子相同,它现在包含我的代码。我必须用线程替换我的main吗,或者在我想要尝试从中运行所有内容的文件中?感谢您的评论,不幸的是,由于某种原因,这不起作用,如果我用printtext替换main,它确实起作用,打赌当我使用AAPL.main时它不起作用这两个主要函数的注释是什么?它们到底做了什么?主要函数从API检索数据并将其存储到.txt文件不幸的是,这不起作用,它同时创建了两个新文件AAPL&GOOG,并且运行AAPL时也会说运行AAPL,但它不会杀死AAPL,因此不会启动GOOG也不会说运行GOOG。即使我添加sleep10和/或sys.exiti,我也不熟悉IBAPI,但经过一些研究。调用app.run将启动一个循环,这意味着它永远不会停止。因此,使用一个进程调用两个文件不会有帮助,因为除非停止正在运行的进程,否则将无法运行下一个语句。这就是为什么我建议你使用多线程。当然,它将创建2个文件,因为这两个函数都在运行。启动GOOG.main不需要杀掉AAPL.main,它们必须一起运行。关于如何停止AAPL或GOOG,你需要查看IB API文档,也许你不需要在AAPI或GOOG文件中使用app.run,也许就我所读到的,它们是做你想做的事情的另一种方式。您可以创建一个类调用AAPI,并将其作为一个线程运行。这个类调用一个线程对象。而不是使用AAPI.main从AAPL文件调用函数。创建一个类AAPL并编写代码,在run函数中运行main,然后使用线程运行AAPL对象。如果你想杀死这个线程或者停止它,只需调用一个stop函数。您需要了解如何创建线程对象,以了解我在说什么。我想这是做你想做的事情的正确方法。谢谢所有的研究人员,我会全力以赴的!我知道更多情况后再报告
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()