我有以下代碼:收集期貨從APScheduler
import pandas as pd
from concurrent.futures import ThreadPoolExecutor, as_completed
from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
class FutureScheduler(object):
def __init__():
self.futures = []
self.scheduler = BlockingScheduler()
self.pool = ThreadPoolExecutor(5)
self.full_frame = pd.DataFrame()
def start(self):
job = self.scheduler.add_job(self.add_future, 'cron', day_of_week='mon-fri', hour='8-15', minute='*')
self.scheduler.start()
self.flush_csvs()
def add_future(self):
self.futures.append(self.pool.submit(self.long_running_task))
def flush_csvs(self):
for future in as_completed(self.futures):
results = future.result()
self.full_frame = pd.concat((self.full_frame, results))
self.full_frame.to_csv('results.csv')
print "flushed... Queue size: %s" % len(self.futures)
def long_running_task(self):
#takes a while may or may not return before the next one is kicked off
所以我的問題是,flush_csvs
循環的內部代碼永遠不會運行。我是否必須在as_completed
被調用之前將所有期貨添加到列表中?有沒有辦法讓BlockingScheduler
迴歸未來?我看到它返回一個Job
,但在這種情況下,我希望它更像未來。