Python线程 - 创建子类?

时间:2013-12-23 02:08:33

标签: python subclass python-multithreading

在使用python中的线程创建子类的原因时,我遇到了一个问题。我读过很多网站,包括tutorialspoint

文档说你需要定义Thread类的新子类。我对类有基本的了解,但根本没有使用子类。我还没有做过这样的事情,还有我用过的任何其他模块,如os& amp; 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.

1 个答案:

答案 0 :(得分:1)

  

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

  

我能够在不创建这个子类的情况下编写自己的脚本,并且它可以工作,所以我不确定为什么这是一个要求。

Python 文档说没有这样的东西,也无法猜出你在谈论哪些文档。 Here are Python docs

  

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

你正在使用那里指定的第一个方法(将callable传递给Thread()构造函数)。没关系。当callable需要访问状态变量时,子类变得更有价值,并且您不希望为此目的使用全局变量来混乱程序,特别是当使用多个线程时,每个线程都需要自己的状态变量。然后,状态变量通常可以作为自己的threading.Thread子类的实例变量实现。如果您还不需要(还),请不要担心(还)。