当在python中使用线程时,我的脑袋无法解决创建子类的原因。我已经阅读了许多网站,包括tutorialspoint

文档说您需要定义Thread类的新子类。我对类有基本的了解,但根本没有玩过子类。我还没有对我使用过的其他任何模块(例如os&ftplib)做类似的事情。谁能指出我的网站,这对于新手脚本编写者来说可能会更好地解释这一点?

#!/usr/bin/python

import threading

class myThread (threading.Thread):


我能够编写自己的脚本而无需创建此子类,并且该脚本可以工作,因此我不确定为什么将其声明为要求。这是我创建的简单的小脚本,旨在帮助我最初了解线程。

#!/usr/bin/python

# Import the necessary modules
import threading
import ftplib

# FTP function - Connects and performs directory listing
class
def ftpconnect(target):
        ftp = ftplib.FTP(target)
        ftp.login()
        print "File list from: %s" % target
        files = ftp.dir()
        print files

# Main function - Iterates through a lists of FTP sites creating theads
def main():
    sites = ["ftp.openbsd.org","ftp.ucsb.edu","ubuntu.osuosl.org"]
    for i in sites:
        myThread = threading.Thread(target=ftpconnect(i))
        myThread.start()
        print "The thread's ID is : " + str(myThread.ident)

if (__name__ == "__main__"):
    main()


谢谢您的帮助!

我使用tutorialspoint.com作为参考资料。听起来您的说法让我感到吃力,但我现在应该保持简单,因为我不需要使用更复杂的选项。这就是网站所说的:

Creating Thread using Threading Module:
To implement a new thread using the threading module, you have to do the following:

- Define a new subclass of the Thread class.

- Override the __init__(self [,args]) method to add additional arguments.

- Then, override the run(self [,args]) method to implement what the thread should do when started.

Once you have created the new Thread subclass, you can create an instance of it and then start a new thread by invoking the start(), which will in turn call run() method.

最佳答案

文档说您需要定义Thread类的新子类。





  我能够编写自己的脚本而无需创建此子类,并且该脚本可以工作,因此我不确定为什么将其声明为要求。


Python文档没有这么说,也无法猜测您正在谈论的文档。 Here are Python docs


  有两种指定活动的方法:通过将可调用对象传递给构造函数,或通过重写子类中的run()方法。子类中不应覆盖其他任何方法(构造函数除外)。换句话说,仅重写此类的init()和run()方法。


您正在使用在那里指定的第一个方法(将可调用方法传递给Thread()构造函数)。没关系。当可调用对象需要访问状态变量并且您不想为此而用全局变量使程序混乱时,尤其是当使用多个各自需要其状态变量的线程时,子类变得更有价值。然后,状态变量通常可以在您自己的threading.Thread子类上作为实例变量实现。如果您不需要(尚未),则不必担心。

关于python - Python线程-创建子类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20736131/

10-16 04:19