On Jan 16, 1:33 pm, "Diez B. Roggisch" <[EMAIL PROTECTED]> wrote: > Dan schrieb: > > > > > On Jan 16, 11:06 am, "Diez B. Roggisch" <[EMAIL PROTECTED]> wrote: > >> Hendrik van Rooyen wrote: > >>> "Dan" <the,,,ail.com> wrote: > >>>>>>> keyboard_thread = thread.start_new_thread(kbd_driver (port_q,kbd_q)) > >>>> Needs to be > >>>>>>> keyboard_thread = thread.start_new_thread(kbd_driver, (port_q,kbd_q)) > >>>> Commas are important! > >>>> -Dan > >>> Absolutely! - well spotted! > >>> As the first correct respondent, you win the freedom to spend a week in > >>> Naboomspruit at your own expense. > >>> It would have been nice, however, to have gotten something like: > >>> TypeError - This routine needs a tuple. > >>> instead of the silent in line calling of the routine in question, > >>> while failing actually to start a new thread. > >> You can't prevent the silent inline-calling - otherwise, how would you do > >> this: > > >> def compute_thread_target(): > >> def target(): > >> pass > >> return target > > >> thread.start_new_thread(compute_thread_target()) > > >> Of course start_new_thread could throw an error if it got nothing callable > >> as first argument. No idea why it doesn't. > > >> Diez > > > Of course, in his case, having start_new_thread throw an error > > wouldn't have helped, since he went into an infinite loop while > > evaluating the parameters for start_new_thread. > > > Would it be possible to have pychecker (or some such) warn that there > > is an insufficient parameter count to start_new_thread? I guess that > > would require knowing the type of thread. . . > > What has this to do with the second argument? It's perfectly legal to > have a function as thread-target that takes no arguments at all, so > enforcing a second argument wouldn't be helpful - all it would do is to > force all developers that don't need an argument tuple to pass the empty > tuple. So there was no insufficient argument count. > > And none of these would solve the underlying problem that in python > expressions are evaluated eagerly. Changing that would mean that you end > up with a totally new language. > > the only thing that could help to a certain extend would be static > types. Which we don't want here :) > > Diez
It doesn't seem to be legal in my version of python (or the doc): >>> import thread >>> def bat(): print "hello" >>> thread.start_new_thread(bat) Traceback (most recent call last): File "<pyshell#12>", line 1, in <module> thread.start_new_thread(bat) TypeError: start_new_thread expected at least 2 arguments, got 1 >>> thread.start_new_thread(bat, ()) 2256hello >>> -Dan -- http://mail.python.org/mailman/listinfo/python-list