Python子进程随机降到0%cpu使用率,导致进程“挂断”

文森特

我运行了几个 python 子进程来将数据迁移到 S3。我注意到我的 python 子进程经常下降到 0% 并且这种情况持续超过一分钟这会显着降低迁移过程的性能。

这是子进程的图片: 在此处输入图片说明

子进程做这些事情:

  1. 从数据库中查询所有表。
  2. 为每个表生成子进程。

    for table in tables:
        print "Spawn process to process {0} table".format(table)
        process = multiprocessing.Process(name="Process " + table,
                                      target=target_def,
                                      args=(args, table))
        process.daemon = True
        process.start()
        processes.append(process)
    for process in processes:
        process.join()
    
  3. 使用限制和偏移从数据库查询数据。我使用 PyMySQL 库来查询数据。

  4. 将返回的数据转换为另一种结构。construct_structure_def()是将行转换为另一种格式的函数。

    buffer_string = []
    for i, row_file in enumerate(row_files):
        if i == num_of_rows:
            buffer_string.append( json.dumps(construct_structure_def(row_file)) )
        else:
            buffer_string.append( json.dumps(construct_structure_def(row_file)) + "\n" )
    content = ''.join(buffer_string)
    
  5. 将转换后的数据写入文件并使用 gzip 进行压缩。

    with gzip.open(file_path, 'wb') as outfile:
        outfile.write(content)
    return file_name
    
  6. 将文件上传到 S3。

  7. 重复第 3 - 6 步,直到不再提取行。

为了加快速度,我使用multiprocesses.Process内置库为每个表创建子进程

我在虚拟机中运行了我的脚本。以下是规格:

  • 处理器:Intel(R) Xeon(R) CPU E5-2690 @ 2.90 Hz 2.90 GHz(2 个进程)
  • 虚拟处理器:4
  • 已安装内存:32 GB
  • 操作系统:Windows 企业版。

我在这里的帖子中看到,主要的可能性之一是由于内存 I/O 限制。因此,我尝试运行一个子流程来测试该理论,但无济于事。

知道为什么会这样吗?如果你们需要更多信息,请告诉我。

先感谢您!

文森特

原来罪魁祸首是我运行的查询。查询花了很长时间才返回结果。这使得 python 脚本空闲,因此使用率为零。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在处理大型numpy数组时,Python随机降到0%的CPU使用率,导致代码“挂断”?

CPU使用率为25%时的随机进程

如何查找哪个进程导致CPU使用率高

当我从进程内部检查进程的CPU使用率时,top命令返回0%CPU使用率

获取特定的进程CPU使用率

监控每个进程的CPU使用率

ikec作为后台进程启动时会导致较高的cpu使用率

如何在Linux中计算一个进程及其所有子进程的CPU使用率?

'htop'进程和线程的CPU使用率?

按进程名称过滤并记录CPU使用率

一个特定进程的Dstat CPU使用率

测量C ++和Java进程的CPU使用率

如何限制节点进程的CPU和内存使用率

系统进程CPU使用率高(Queue / Dequeue + TrimAlllSystemPagableMemory)

在IIS进程上调试高CPU使用率

psutil:测量特定进程的CPU使用率

在Powershell中按CPU使用率列出进程

流星节点进程CPU使用率接近100%

限制CPU使用率%所有进程和核心

如何从相关进程获取CPU使用率?

持续监控前X个进程的CPU使用率

检索Linux上单个进程的CPU使用率和内存使用率?

Httpd进程降低了CPU使用率(99%的使用率)

需要脚本来杀死CPU使用率较低的python进程

根据Python中的CPU使用率更改要生成的进程数

如何限制一个进程及其子进程的CPU使用率,而不管是否存在另一个要求资源的进程

为什么 EC2 服务器上的多个 Ruby 进程会导致 100% 的 CPU 使用率?

获取进程的内存使用率(%)

每个进程的内存使用率