[Tutor] Thread question

Steven D'Aprano steve at pearwood.info
Thu Oct 18 01:37:38 CEST 2012


A brief comment before I start:

your post would be a lot more readable and understandable if you were to
break it up into smaller paragraphs, each of which explains one point.
Otherwise it is a great wall of text which is fairly intimidating.

On 18/10/12 06:51, Mike wrote:

> My program is command line based and is driven by the user making a
> selection from the menu. Basically option 1 perform a HTTP GET request
> to xyz.com/?get=test.  The user supply's a list  of target domains and
> the query (?get=test) is static.

No it isn't. You go on to explain below that there are at least two
different queries:


and presumably no query at all (when param='').

Since the query is not static, but part of the request, it should be part
of the data pushed onto the queue. Instead of queuing just the domains,
queue a tuple (domain, query) or even the full URL.

> This works great if the user selects option 1, but I am
> running into problems when a user selects multiple options.  Say a
> user selection 1 then option (2) with the targets being the same, but
> the query string is now ?get=check. The problem I am facing is when
> the threads run with option 1 and hit the initialization they are set
> to ?get=test i.e. self.param=param. The param is passed in to the init
> of the thread class.  When I initialize the class from option 1 I pass
> in the param ?get=test and when I initialize the class with option 2 I
> pass in the param ?get=check.  The default initialization is
> self.param="".

Why is the query an attribute of the *thread*? The query is an attribute
of the request, not the thread.

Change your design, and the problem goes away.

> Depending on which option they select first the thread
> will be one of the following: blank, or one of the two options.  I
> don't know how to update the thread variable when it's running i.e.def
> run(self).

mythread.param = new_value

but please don't do this. The design is wrong, you have wrongly assumed
that the param is a part of the thread when it is actually a part of the

> I realize this sounds all confusing, but  I am basically
> wondering how one would update a thread variable when it is running?
> Also, is it best to spawn threads each time the user make a selection
> or once when the program starts?

I would say, neither. It is best to spawn threads when they click the
"Make it go" button. Decide how many threads you need, spawn them, and
let them run.


More information about the Tutor mailing list