我的脚本不起作用。所有10个进程都获取第一个列表项,然后停止。输出10x1个列表条目 如何解决这个问题?错误必须在循环中,或者我需要为此设置队列吗
import finanzen_fundamentals.stocks as ff
import mysql.connector
import pandas as pd
import multiprocessing
import time
results = []
def get_list():
try:
mydb = mysql.connector.connect( host="localhost", user="changed", password="changed", database="stockdata")
mycursor = mydb.cursor()
mycursor.execute("select * from url_name")
record = mycursor.fetchall()
return record
except Exception as e:
return str(e)
def create_json(record):
for row in record:
try:
df = ff.get_current_value_lxml(str(row[2])[:-1], exchange = "FSE")
print('Name:' + row[0] + ' WKN:' + df['wkn'].values[0] + ' Preis:' + str(df['price'].values[0]) + ' Currency:' + df['currency'].values[0] + ' Zeit:' + df['time'].values[0])
result = [[row[0], df['wkn'].values[0], df['price'].values[0], df['currency'].values[0], df['time'].values[0]]]
return result
except Exception as e:
print(str(e))
def collect_results(result):
results.extend(result)
if __name__ == '__main__':
record = get_list()
start_time = time.time()
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
for i in range(10):
pool.apply_async(create_json, args=(record, ), callback=collect_results)
pool.close()
pool.join()
df_out = pd.DataFrame(results, columns=['Name', 'WKN', 'Preis', 'Currency', 'Zeit'])
print(df_out)
输出:
Name WKN Preis Currency Zeit
0 21VIANET GRP ADR A/6 O. A1H9DT 20.0 EUR 23.10.2020
1 21VIANET GRP ADR A/6 O. A1H9DT 20.0 EUR 23.10.2020
2 21VIANET GRP ADR A/6 O. A1H9DT 20.0 EUR 23.10.2020
3 21VIANET GRP ADR A/6 O. A1H9DT 20.0 EUR 23.10.2020
4 21VIANET GRP ADR A/6 O. A1H9DT 20.0 EUR 23.10.2020
5 21VIANET GRP ADR A/6 O. A1H9DT 20.0 EUR 23.10.2020
6 21VIANET GRP ADR A/6 O. A1H9DT 20.0 EUR 23.10.2020
7 21VIANET GRP ADR A/6 O. A1H9DT 20.0 EUR 23.10.2020
8 21VIANET GRP ADR A/6 O. A1H9DT 20.0 EUR 23.10.2020
9 21VIANET GRP ADR A/6 O. A1H9DT 20.0 EUR 23.10.2020
你把循环结构搞错了。在
create_json
内,您正在循环record
的row
,但在第一次迭代时,您总是使用相同的原始record
列表和return
来调用它。所以所有的工人都会在第一线工作。您需要更改辅助函数以在row
上操作:然后在主代码中用每行调用它:
注意,在这种情况下,您可以使用^{} ,而不是循环和调用^{} 。它甚至已经返回了一个结果列表,这样你就不再需要
callback
,类似于:相关问题 更多 >
编程相关推荐