当前位置: 首页 > 面试题库 >

Windows计算机上IPython控制台中的多处理-如果__name_要求

艾意蕴
2023-03-14
问题内容

我正在Windows计算机上使用IPython和Spyder IDE。在IDE启动时,会加载一组py文件来定义一些使我的工作更轻松的函数。一切正常。

现在,我想升级这些功能之一以使用多重处理,但是在Windows上,这需要if __name__ == "__main__":声明。因此,似乎无法直接调用该函数并从IPython控制台传递参数。

例如,其中一个py文件(我们称其为test.py)可能类似于以下代码

import multiprocessing as mp
import random
import string

# define a example function
def rand_string(length, output):
    """ Generates a random string of numbers, lower- and uppercase chars. """
    rand_str = ''.join(random.choice(
                string.ascii_lowercase
                + string.ascii_uppercase
                + string.digits)
           for i in range(length))
    output.put(rand_str)


def myFunction():
    # Define an output queue
    output = mp.Queue()

    # Setup a list of processes that we want to run
    processes = [mp.Process(target=rand_string, args=(5, output)) for x in range(4)]

    # Run processes
    for p in processes:
        p.start()

    # Exit the completed processes
    for p in processes:
        p.join()

    # Get process results from the output queue
    results = [output.get() for p in processes]

    print(results)

在我的IPython控制台中,我想使用

myFunction()

触发所有计算。但是在Windows上最终会出现BrokenPipe错误。

当我放

if __name__ == "__main__":
     myFunction()

在py文件的末尾,然后运行完整的文件

runfile(test.py)

有用。当然。但这使传递参数到函数非常困难,因为我总是必须编辑test.py文件本身。

我的问题是:如何在不将多处理功能放入此if __name__ == "__main__":语句的情况下运行它?


问题答案:

因此,我解决了该特定问题。

  1. 将的定义放在rand_string另一个名为的文件中 test2

  2. 导入test2为模块插入我的test.py脚本

import test2 as test2

  1. 修改以下行以访问test2模块

    processes = [mp.Process(target=test2.rand_string, args=(5, output)) for x in range(4)]
    
  2. test.py

  3. 呼叫 myFunction()

  4. 要开心 :)

该解决方案基于此多处理教程,该教程建议从另一个脚本导入目标函数。此解决方案绕过if __name__-wrapper的安全自我导入,以访问目标函数。



 类似资料:
  • 问题内容: 作为Node.js环境和哲学的新手,我想回答几个问题。我已经下载了Windows安装程序的node.js和节点包管理器.Windows Cmd提示符当前用于运行nodejs应用程序。 cls清除命令窗口或命令提示符中的错误。有node.js的等效项吗?console.clear不存在;(或是否以其他形式存在? 我通过下面的代码创建了一个服务器 我将代码更改为下面的代码,并刷新了浏览器,

  • 我正在使用Eclipse Version:Oxygen.3a发行版(4.7.3a)下的Python3.7.7,希望能够在Eclipse PyDev控制台中运行ipython。 虽然ipython在“Windows->首选项->PyDev->解释器->软件包”下显示为已安装 对于Eclipse中的PyDev控制台来说,它仍然是未知的: windows控制台对此表示: 任何帮助都将不胜感激!

  • 在阅读了这个问题的答案之后,我试着将其放在中。启动(使用),我尝试了别名。他们没有被认出来。 我想知道如何在全局和虚拟环境中设置。

  • 问题内容: 在WSGI中,通过读取类似文件的object来消耗发布数据。如果堆栈中的第二个元素也想要读取发布数据,则在没有其他要读取的内容时,可以通过读取来挂起程序。 我应该如何复制POST数据以便可以多次处理? 问题答案: 去看看WebOb包。它提供的功能允许指定wsgi.input应该可搜索。这样的效果是允许您倒回输入流,以便可以通过不同的处理程序重放内容。即使您不使用WebOb,它的执行方式

  • 问题内容: 本地计算机(PC)上用户界面右上方的下拉菜单: 问题答案: IPython use kernel是一个文件,其中描述了如何启动内核。如果创建自己的内核(远程或其他),则程序运行远程内核并本地绑定到笔记本的端口将由您决定。

  • 我正在使用jhipster,我想在我的WebApp中集成spring批处理管理控制台。(例如http://localhost:8080/batch-console) 我尝试在我的jhipster webapp中集成以下响应,有没有一种方法可以正确地集成spring-batch-admin和spring-boot?但我得到以下错误(属性似乎未加载) Spring Boot版本:1.4.1.发布Jhi