Python:单击按钮时创建新线程或进程

时间:2021-07-14 20:43:43

In Python 3.6.4, what is a good approach for starting a new separate process or thread on every click of a button? I have written this code but it's not working the way I want it to.

在Python 3.6.4中,每次单击按钮时启动新的单独进程或线程的好方法是什么?我已经编写了这段代码,但它并没有按照我想要的方式工作。

from multiprocessing import process 
import requests
import threading 
from tkinter import *

def download():
    name=entry2.get()
    url=entry1.get()

    r = requests.head(url)
    if name:
          file_name = name
    else:
          file_name = url.split('/')[-1]
    try:
          file_size = int(r.headers['content-length'])
          part=file_size/4
          start=0
          end=part
    except:
           print ("Invalid URL")
           return


    print ('%s downloaded' % file_name)


def thread(url):

    file_name=entry2.get()
    r=requests.get(url)
    data=r.content

    with open('file_name','rb+')as fp:
          data1=fp.read()

    with open('file_name',"wb+") as fp:
          data1=fp.write(data)

    print("its working3")

if __name__=='__main__':
    p=process(target=download,args=())
    p.start()
    p.join()

root=Tk()

frame=Frame(root,width=500,height=450,bg="lightpink")

url1=Label(frame,text="enter url here")
name=Label(frame,text="enter the name of the file")

url1.grid(row=0,sticky=E)
name.grid(row=1,sticky=E)

entry1=Entry(frame)
entry2=Entry(frame)

entry1.grid(row=0,column=1)
entry2.grid(row=1,column=1)

button1=Button(frame,text="download" ,command=download)        
button1.grid(row=2,column=0)
button3=Button(frame,text="quit",command=frame.quit)
button3.grid(row=2,column=1)
frame.grid()

print("its working4")

root.mainloop()

1 个解决方案

#1


0  

Does this do the job? It uses the threading module rather than multiprocessing:

这样做了吗?它使用线程模块而不是多处理:

#from multiprocessing import process
from threading import Thread as process
import requests
import threading 
from tkinter import *

def download():
    name=entry2.get()
    url=entry1.get()

    r = requests.head(url)
    if name:
          file_name = name
    else:
          file_name = url.split('/')[-1]
    try:
          file_size = int(r.headers['content-length'])
          part=file_size/4
          start=0
          end=part
    except:
           print ("Invalid URL")
           return


    print ('%s downloaded' % file_name)


def thread(url):

    file_name=entry2.get()
    r=requests.get(url)
    data=r.content

    with open('file_name','rb+')as fp:
          data1=fp.read()

    with open('file_name',"wb+") as fp:
          data1=fp.write(data)

    print("its working3")

root=Tk()

frame=Frame(root,width=500,height=450,bg="lightpink")

url1=Label(frame,text="enter url here")
name=Label(frame,text="enter the name of the file")

url1.grid(row=0,sticky=E)
name.grid(row=1,sticky=E)

entry1=Entry(frame)
entry2=Entry(frame)

entry1.grid(row=0,column=1)
entry2.grid(row=1,column=1)

button1=Button(frame,text="download" ,command=lambda: process (target = download).start ())        
button1.grid(row=2,column=0)
button3=Button(frame,text="quit",command=root.destroy)
button3.grid(row=2,column=1)
frame.grid()

print("its working4")

root.mainloop()

#1


0  

Does this do the job? It uses the threading module rather than multiprocessing:

这样做了吗?它使用线程模块而不是多处理:

#from multiprocessing import process
from threading import Thread as process
import requests
import threading 
from tkinter import *

def download():
    name=entry2.get()
    url=entry1.get()

    r = requests.head(url)
    if name:
          file_name = name
    else:
          file_name = url.split('/')[-1]
    try:
          file_size = int(r.headers['content-length'])
          part=file_size/4
          start=0
          end=part
    except:
           print ("Invalid URL")
           return


    print ('%s downloaded' % file_name)


def thread(url):

    file_name=entry2.get()
    r=requests.get(url)
    data=r.content

    with open('file_name','rb+')as fp:
          data1=fp.read()

    with open('file_name',"wb+") as fp:
          data1=fp.write(data)

    print("its working3")

root=Tk()

frame=Frame(root,width=500,height=450,bg="lightpink")

url1=Label(frame,text="enter url here")
name=Label(frame,text="enter the name of the file")

url1.grid(row=0,sticky=E)
name.grid(row=1,sticky=E)

entry1=Entry(frame)
entry2=Entry(frame)

entry1.grid(row=0,column=1)
entry2.grid(row=1,column=1)

button1=Button(frame,text="download" ,command=lambda: process (target = download).start ())        
button1.grid(row=2,column=0)
button3=Button(frame,text="quit",command=root.destroy)
button3.grid(row=2,column=1)
frame.grid()

print("its working4")

root.mainloop()