来自回调 tkinter 的多处理

来自回调 tkinter 的多处理

问题内容

问题是当我想从回调 tkinter(特别是函数 tkinter 的绑定)触发进程“多重处理”时。错误从这里开始:

file“c:usersusuariodownloadsengine_controller_lsextracttextuncioneseproductor.py”,第 598 行,在 __init__ p.start() 文件“c:program filespython311libmultiprocessingprocess .py”,第 121 行,开始 self._popen = self._popen(self) ^^^^^^^^^^^^^^^^^^ 文件“c:program filespython311libmultiprocessing context.py”,第 224 行,在 _popen 中返回 _default_context.get_context().process._popen(process_obj) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“c:program filespython311libmultiprocessingcontext.py”,第 336 行,在 _popen 返回 popen(process_obj) ^^^^^^^^^^^^^^^^^^^ 文件 “c:program filespython311libmultiprocessingpopen_spawn_win32.py”,第 95 行,在 __init__duction.dump(process_obj, to_child) 文件“c:program filespython311libmultiprocessingeduction.py”中,第 60 行,在转储 forkingpickler(file, protocol).dump(obj) 中 typeerror: 无法 pickle ‘ _tkinter.tkapp’对象

ma​​in.py

from reproductor import mediaplayerdef item_selected(event):    """    evento invocado cuando el contenido de una carpeta es abierto.    """    item_seleccionado = arbol.selection()    item = arbol.item(item_seleccionado)    print(item)        #extraer la ruta del archivo y si encuentra espacios unirlos    ruta = ""    for element in item["values"]:        ruta += element + " "        #iniciacion del video    global reproductor_video    # cerrar el video para que no se abra en multiples ventanas    if reproductor_video is not none:        reproductor_video.closeplayer()        reproductor_video = mediaplayer(ruta, frame_visualizer, frame_botones_procesar, spininicio=inbox_inicio, spinfinal=inbox_fin, spinactual=inbox_actual, mainvideo=true)    reproductor_video.update_progres_video()arbol = checkboxtreeview(frame_tree_in)arbol.bind(">", item_selected)

登录后复制

reproductor.py

class MediaPlayer:    def __init__(ruta, frame_visualizer, frame_botones_procesar, spinInicio=inBox_inicio, spinFinal=inBox_fin, spinActual=inBox_Actual, mainVideo=True):        p = Process(target=self.funcion1)        p.start()        #p.join    def funcion1(self):        cont = 0        while cont 

我在主函数中尝试了相同的代码,并且它执行得很好,但是从回调中它不会执行。


正确答案


原版

解决方案在这里为那些需要它的人提供,实际上,如果它可以从 tkinter 上的事件启动,如下所示:

翻译(谷歌翻译):

解决方案在这里为那些需要它的人提供,事实上它可以从 tkinter 中的事件启动,如下所示:

from multiprocessing import Process, log_to_stderr, get_loggerimport timefrom tkinter import Tkfrom tkinter import ttkimport loggingimport sysdef item_selected(event):        my_objeto = objeto()    button_eraser.config(command=lambda:my_objeto.lanzador(2))    button_marco.config(command=lambda:my_objeto.lanzador(1))    my_objeto.start_player()class objeto:    def __init__(self) -> None:        #self.start_player()        pass        def start_player(self):        pass            def funcion1(self):        contador = 0        while 1:            contador += 1            print("Func1: ", contador, self.palabra)            time.sleep(0.1)                        if contador > 80:                break                q = Process(target=self.funcion3)        q.start()        #q.join()        def funcion2(self):        contador = 0        while 1:            contador += 2            print("Func2: ", contador)            time.sleep(0.2)            if contador > 120:                break        def funcion3(self):        contador = 0        while 1:            contador += 2            print("Func3: ", contador)            time.sleep(0.02)            if contador > 200:                break        def lanzador(self,mode):        log_to_stderr(logging.DEBUG)        logger = get_logger()        logger.setLevel(logging.INFO)        if mode == 1:            self.p = Process(target=self.funcion1)            self.p.start()        elif mode == 2:            self.p = Process(target=self.funcion2)            self.p.start()            def unir(self):        self.p.join()        print("Salio")    def iniciar_multis(self):        self.lanzador(2)        self.lanzador(1)

登录后复制

以上就是来自回调 tkinter 的多处理的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2211903.html

(0)
上一篇 2025年2月26日 05:02:42
下一篇 2025年2月18日 08:27:22

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 提升效率:PyCharm快速导入第三方库技巧分享

    提升效率:PyCharm快速导入第三方库技巧分享 Python 是一种广泛应用的编程语言,由于其强大的第三方库支持,使得Python成为了许多开发者的首选。在Python开发过程中,我们经常会使用到各种第三方库来实现各种功能,比如数据处理、…

    2025年2月26日
    200
  • PyCharm操作指南:轻松安装OpenCV插件

    PyCharm是一款被广泛应用于Python开发的集成开发环境,它提供了丰富的功能和灵活的设置,使得开发者可以更高效地进行编程工作。在PyCharm中安装各种插件可以进一步扩展其功能,比如安装OpenCV插件可以帮助开发者进行计算机视觉相关…

    2025年2月26日
    200
  • 如何用python删除第一个数字的0

    问题内容 即使变量的类型是 char,我也需要删除 numbre 开头的所有 0: 0 Number = “0000386489””0000386489″ —>> 386489 登录后复制 或者有一个开头为 0 的整数 正确…

    2025年2月26日
    200
  • 请求模块是否会截断标头?

    问题内容 我正在尝试使用相当长(1017 个字符)的承载令牌向我的 API 发出 POST 请求以进行授权。 无论我尝试什么,当我启动请求时,我都会收到一条错误消息,指出位置 512 中的 u2026 (水平省略号)无法使用“latin-1…

    2025年2月26日
    200
  • PyCharm社区版性能如何?够用吗?

    PyCharm作为一款著名的Python集成开发环境(IDE),其社区版是免费提供给开发者使用的版本,那么PyCharm社区版的性能如何?其是否足够满足开发需求?让我们来通过具体的代码示例来探讨一下这个问题。 首先,让我们从PyCharm社…

    2025年2月26日
    200
  • PyCharm密钥注册教程汇总

    PyCharm是一款功能强大的Python集成开发环境(IDE),它的敏捷开发环境可以让程序员更加高效地编写Python代码。PyCharm的使用需要激活,而激活方式就是通过注册密钥来实现。本文将介绍PyCharm密钥注册的详细教程,并提供…

    2025年2月26日
    200
  • PyCharm与TensorFlow集成教程分享

    PyCharm与TensorFlow是许多数据科学家和机器学习工程师常用的工具。PyCharm是一款功能强大的Python集成开发环境(IDE),而TensorFlow则是谷歌推出的开源机器学习框架,被广泛应用于各种深度学习任务中。 在本教…

    2025年2月26日
    200
  • PyCharm解释器安装步骤详解:让你成为Python开发高手

    PyCharm是广受欢迎的Python集成开发环境(IDE),它在Python开发领域中具有非常强大的功能和使用性。其中,安装解释器是PyCharm开发环境的重要一步,本文将详细介绍PyCharm解释器安装的步骤,并提供具体的代码示例,帮助…

    2025年2月26日
    200
  • 快速了解PyCharm专业版激活技巧

    快速了解PyCharm专业版激活技巧,需要具体代码示例 PyCharm是一款功能强大的Python集成开发环境(IDE),其专业版拥有更多高级功能,但需要购买激活才能使用。有时候我们可能需要快速激活PyCharm专业版,下面将介绍一些技巧以…

    2025年2月26日
    200
  • 一分钟搞定PyCharm专业版激活

    由于激活PyCharm专业版需要购买许可证,因此激活过程并非只需一分钟就能完成。激活PyCharm专业版的过程中,通常需要使用许可证密钥和激活码。如果您拥有合法的许可证密钥和激活码,可以通过以下步骤来激活PyCharm专业版: 打开PyCh…

    2025年2月26日
    200

发表回复

登录后才能评论