我想知道在学习方面寻求帮助是不是可以…但现在它开始了。
在一个课程中,我试着轻松地做了一件我在C#中做过的事情。其思想是将虚构的销售数据放入object数组,进行排序,驱动到bin文件、json文件、xml文件中,从数据中生成10×1000批次的随机订单in,再对这些数据进行二进制搜索,将对象搜索并保存到excel文件中,最后得到一个bin文件、一个json文件、一个xml文件和10个各1000个订单行的excel文件。
这在过程化的方式中是相当容易的,但是当尝试多处理时,它变得非常奇怪。首先,它从上到下一直到行:if __name__ == '__main__',之后它似乎多次开始执行所有相同的方法……
以下是我的主要内容:
import multiprocessing
import CsvReader
import DataContainer
import FileWriter
from datetime import datetime
import ExcelHandler
processes = []
container = DataContainer.DataContainer() #csv_reader.readFile())
csv_reader = CsvReader.CsvReader(r'C:\Users\jansse\Desktop\opiskelut\Python\finalCapstoneProj\100000 Sales Records.csv', container)
print(f'objects inside from the csv file: {datetime.now().time()}')
print(f"lines: {csv_reader.readFile()}")
print(f'begin sorting: {datetime.now().time()}')
container.sort_container()
print(f'sort done, multiprocessingStart {datetime.now().time()}')
fWriter = FileWriter.FileWriter(container)
p1 = multiprocessing.Process(target=fWriter.write_to_binary)
processes.append(p1)
p2 = multiprocessing.Process(target=fWriter.write_to_json)
processes.append(p2)
p3 = multiprocessing.Process(target=fWriter.generate_XmlFile)
processes.append(p3)
xlHandler = ExcelHandler.ExcelHandler(container)
p4 = multiprocessing.Process(target=xlHandler.rollExcels)
processes.append(p4)
if __name__ == '__main__':
for p in processes:
p.start()
for p in processes:
p.join()下面是一个方法的示例:
def write_to_json(self):
import json
print(f'json writing start {datetime.now().time()}')
try:
jsonData = ''
with open('objects.json', 'w') as outputfileJson:
dEncoder = DataModel.DataEncoder
json.dump(self.container.returnContainer(), outputfileJson ,cls=dEncoder)
except Exception as e:
print(f'Something happened: {e.__class__}, {e.args[0]}')
finally:
return (f'json writing completed {datetime.now().time()}')输出结果如下所示。为什么它看起来像是回到了准备数据的方法(比如排序),为什么它不等待json-write完成,尽管我在声明之后加入了进程?我的调试打印:
objects inside from the csv file: 06:27:33.139741
lines: 100001
begin sorting: 06:27:34.733476
sort done, multiprocessingStart 06:27:34.893071
objects inside from the csv file: 06:27:35.511050
lines: 100001
begin sorting: 06:27:37.111736
sort done, multiprocessingStart 06:27:37.283164
binarywriting start 06:27:38.886788
objects inside from the csv file: 06:27:39.482656
lines: 100001
begin sorting: 06:27:41.124737
sort done, multiprocessingStart 06:27:41.267926
json writing start 06:27:42.855922
objects inside from the csv file: 06:27:43.400854
lines: 100001
begin sorting: 06:27:44.938005
sort done, multiprocessingStart 06:27:45.097263
xml writing start 06:27:46.922682
objects inside from the csv file: 06:27:47.495836
lines: 100001
begin sorting: 06:27:49.225932
sort done, multiprocessingStart 06:27:49.397371
Excel writing start 06:27:51.089208
excelfile generating:0
excelfile generating:1
excelfile generating:2
excelfile generating:3
excelfile generating:4
excelfile generating:5
excelfile generating:6
excelfile generating:7
excelfile generating:8
excelfile generating:9
Excel writing completed 06:27:56.816604
xml writing completed 06:28:27.855510发布于 2020-09-01 11:57:59
PYPL:这很有帮助!谢谢:)
import multiprocessing
import DataContainer
import FileWriter
from datetime import datetime
import ExcelHandler
import CreateContainer
if __name__ == '__main__':
creator = CreateContainer.CreateContainer()
container = creator.createContainer()
processes = []
print(f'multiprocessingStart {datetime.now().time()}')
fWriter = FileWriter.FileWriter(container)
p1 = multiprocessing.Process(target=fWriter.write_to_binary)
processes.append(p1)
p2 = multiprocessing.Process(target=fWriter.write_to_json)
processes.append(p2)
p3 = multiprocessing.Process(target=fWriter.generate_XmlFile)
processes.append(p3)
xlHandler = ExcelHandler.ExcelHandler(container)
p4 = multiprocessing.Process(target=xlHandler.rollExcels)
processes.append(p4)
for p in processes:
p.start()
for p in processes:
p.join()现在打印如下所示:
objects inside from the csv file: 06:05:59.502160
lines: 100001
begin sorting: 06:06:01.256706
containerReady 06:06:01.415215
multiprocessingStart 06:06:01.428252
binarywriting start 06:06:03.183367
json writing start 06:06:04.988768
xml writing start 06:06:06.725813
Excel writing start 06:06:08.561955
excelfile generating:0
excelfile generating:1
excelfile generating:2
excelfile generating:3
excelfile generating:4
excelfile generating:5
excelfile generating:6
excelfile generating:7
excelfile generating:8
excelfile generating:9
Excel writing completed 06:06:15.105672
xml writing completed 06:06:49.466709
json writing completed 06:08:15.298768...and我没有看到从write_ to _json-method中打印的原因是因为我从那里返回了变量,却忘了把它改成print-method。
https://stackoverflow.com/questions/63664488
复制相似问题