Python学校/学习

问题描述

我想知道是否可以向学习中的人寻求帮助...但是就这样了。

在一门课程中,我尝试轻松地完成我在C#中所做的事情。想法是将假想的销售数据带到对象数组,对其进行排序,将其驱动到bin文件,json文件,xml文件,从数据中生成10x 1000个批次的随机订单ID,通过二进制搜索将对象搜索到这些对象并将其保存到excel文件中这样一来,最终我们有了一个bin文件,一个json文件,一个xml文件和十个excel文件,每个文件具有1000个顺序。

这在过程上很容易做到,但是当尝试多处理时,它确实很奇怪。首先,它从上开始,一直向下到行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写入完成,尽管我在陈述它们之后加入了进程?我的调试记录:

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

解决方法

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

...以及为什么我看不到write_to_json方法中的打印内容的原因是因为我在此处放置了返回变量的格子,却忘记了将其更改为打印方法。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...