Multiprocessing With kivy.进程池中的进程在future正在运行或挂起错误时突然终止



进程池中的进程突然终止,而未来进程正在运行或挂起。错误,我想不出怎么解决它。请帮帮我。我有两个程序& &;可能& &;是kivy程序和"proba2.py"是file_read程序。

的第一个程序

# proba.py for kivy
from kivy.uix.widget import Widget
from kivy.app import App
import proba2
class Main(Widget):
def __init__(self, **kwargs):
super(Main, self).__init__(**kwargs)
def Button(self):
print ("W")
proba2.File_read().Start()
class MainApp(App):
def build(self):
return Main()
if __name__ == '__main__':
from kivy.lang import Builder
Builder.load_string("""<Main>
Button:
on_press: root.Button()""")
MainApp().run()

第二个程序

# proba2.py for File_read
import concurrent.futures
class File_read():
def __init__(self, **kwargs):
super(File_read, self).__init__(**kwargs)
def file_read (self, y, x):
return y*x*self.Name  #Read files and give back to data
def for_loop(self, Name):
self.Name=Name
results=[]
results.clear()
for_loop_result= []
for_loop_result.clear()
with concurrent.futures.ProcessPoolExecutor() as ex:
for y in range (30):
for x in range (30):
results.append (ex.submit(self.file_read,y,x))
for f in concurrent.futures.as_completed(results):
for_loop_result.append (f.result())
return for_loop_result
def Start(self):
for Name_change in range (100):
self.for_loop(Name_change)
print ("Done")

"进程池中的进程在未来进程正在运行或挂起时突然终止。"这个错误停止我的程序,但不是立即。有时可以完成孔程序,有些时间停止在循环的中间。我读了关于name的信息主要= = '但是当我用Button调用其他程序时却不能使用它。我是说我不知道怎么用它。这个程序读取14k文件,并使他们的图片。当这个程序完成后,我更改了文件名,并希望重新开始程序以制作更多的图片。这个节目是一个简短的版本,因为原来的太长了。但问题是一样的。我怎样才能使这个程序稳定?

我在windows 10上使用python 3.10

我找到解决方案了。我取出并发数。期货from for cycle.

# proba2.py for File_read
import concurrent.futures
class File_read():
def __init__(self, **kwargs):
super(File_read, self).__init__(**kwargs)
def file_read (self, y, x):
return y*x*self.Name  #Read files and give back to data
def for_loop(self, Name):
with concurrent.futures.ProcessPoolExecutor() as ex:
for Name_change in range (100):
self.Name=Name
results=[]
results.clear()
for_loop_result= []
for_loop_result.clear()

for y in range (30):
for x in range (30):
results.append (ex.submit(self.file_read,y,x))
for f in concurrent.futures.as_completed(results):
for_loop_result.append (f.result())
return for_loop_result
def Start():
Name_change()
print ("Done")

最新更新