Re: Problem With Tkinter Font
Wildman via Python-list wrote: > Python 3.4.2 > Tkinter 8.6 > Linux > > I want to set the font in a GUI program I am working on. > Here is the pertinent code I am using... > > from tkinter import font > > myfont = font.Font(family='Helvetica', size=10, weight='bold') > > Here is the error I get... > > Traceback (most recent call last): > File "./test.py", line 41, in > myfont = font.Font(family='Helvetica', size=10, weight="bold") > File "/usr/lib/python3.4/tkinter/font.py", line 93, in __init__ > tk.call("font", "create", self.name, *font) > AttributeError: 'NoneType' object has no attribute 'call' > > From my research, the syntax is correct but I am having > doubts. Can anyone clarify? If you do not provide the root argument there is still an implicit dependency: """ class Font: ... def __init__(self, root=None, font=None, name=None, exists=False, **options): if not root: root = tkinter._default_root tk = getattr(root, 'tk', root) """ >>> import tkinter >>> from tkinter import font >>> font.Font(family="Helpvetica", size=10, weight="bold") Traceback (most recent call last): File "", line 1, in File "/usr/lib/python3.4/tkinter/font.py", line 93, in __init__ tk.call("font", "create", self.name, *font) AttributeError: 'NoneType' object has no attribute 'call' >>> root = tkinter.Tk() >>> font.Font(family="Helpvetica", size=10, weight="bold") So you have to create the main window before you can create a Font. -- https://mail.python.org/mailman/listinfo/python-list
Help debugging code - Negative lookahead problem
Hi everyone, So here is my problem. I have a bunch of tweets and various metadata that I want to analyze for sociolinguistic purposes. In order to do this, I'm trying to infer users' ages thanks to the information they provide in their bio, among others. For that I'm using regular expressions to match a couple of recurring patterns in users' bio, like a user mentioning a number followed by various spellings of "years old" as in: "John, 30 years old, engineer." The reason why I'm using regexes for this is that there are actually very few ways people use to mention there age on Twitter, so just three or four regexes would allow me to infer the age of most users in my dataset. However, in this case I also want to check for what comes after "years old", as many people mention their children's age, and I don't want this to be incorrectly associated to the user's age, as in: "John, father of a 12 year old kid, engineer" So cases as the one above should be ignored, so that I can only keep users for whom a valid age can be inferred. My program looks like this: import csv import re with open("test_corpus.csv") as corpus: corpus_read = csv.reader(corpus, delimiter=",") for row in corpus_read: if re.findall(r"\d{2}\s?(?=years old\s?|yo\s?|yr old\s?|y o\s?|yrs old\s?|year old\s?(?!son|daughter|kid|child))",row[5].lower()): age = re.findall(r"\d{2}\s?",row[5].lower()) for i in age: print(i) The program seems to work in some cases, but in the small test file I created to try it out, it incorrectly matches the age mentioned in the string "I have a 12 yo son", and returns 12 as a matched age, which I don't want it to. I'm guessing this has something to do with brackets or delimiters at some point in the program, but I spent a few days on it, and I could not find anything helpful around here or on other forums, so any help would be appreciated. Thus, the actual question is: how to make the program not recognize 12 in "John, father of a 12 year old kid, engineer" as the age of the user, based on the program I already have? I am somewhat new at programming, so apologies if I forgot to mention something important, do not hesitate to tell me if you need more details. Thanks in advance for any help you could provide! -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.6 installation doesn't add launcher to PATH
On Friday, 24 February 2017 18:09:01 UTC, Irmen de Jong wrote: > On 24-2-2017 13:38, ChrisW wrote: > > The installation guidelines for Python 3.6 say: > > > > "Per-user installations of Python do not add the launcher to PATH unless > > the option was selected on installation." > > (https://docs.python.org/3/using/windows.html#from-the-command-line). > > > > However, I've installed Python 3.6 with the 'include PATH' checkbox ticked > > for my user only, and although C:\Windows\py.exe exists, it has not been > > added to my PATH. > > > > I also tried installing for all users, and this also doesn't add it to the > > PATH. > > > > Is this a bug, or have I done something wrong?! > > > > Hm, I don't remember having this issue when installing this myself. > > Are you sure you're checking it from a newly opened cmd.exe *after* the > install > finished? Already opened windows won't see the change until restarted. > > Irmen Yeh - it definitely still happens with a new cmd window... -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.6 installation doesn't add launcher to PATH
On Saturday, 25 February 2017 07:21:30 UTC, eryk sun wrote: > On Fri, Feb 24, 2017 at 12:38 PM, ChrisW wrote: > > However, I've installed Python 3.6 with the 'include PATH' checkbox ticked > > for my user only, and although C:\Windows\py.exe exists, it has not been > > added to my PATH. > > > > I also tried installing for all users, and this also doesn't add it to the > > PATH. > > > > Is this a bug, or have I done something wrong?! > > What the installer adds to PATH is the Python36[-32] directory that > has python.exe and the Scripts directory that has pip.exe. The > recommended way to run Python is via the "python" command not "py". > The py launcher is mainly for shell executing script files with > shebang processing. That said people do use py -X[-Y[-32]] as a > convenient way to run multiple versions of Python without modifying > PATH. > > As to adding SystemRoot to PATH, it should be there already. This > doesn't matter if the program lets CreateProcess search because it > always searches system directories before PATH. But it matters in a > common case; cmd.exe does its own search and only searches PATH (and > also the current directory if the system is configured insecurely). Hmm, that seems to contradict what the docs say: `py` is recommended for Windows users who want to run various versions (not just for executing scripts). SystemRoot is not in my PATH variable. -- https://mail.python.org/mailman/listinfo/python-list
[ANN] aioxmpp 0.8 released
Dear subscribers, I am pleased to announce the release of aioxmpp 0.8. The current release can be obtained from GitHub [1] (check out the v0.8.0 tag or the master branch) or PyPI [2]. The HTML documentation can be found at [3]. Examples can be found in the GitHub repository, in the examples sub directory. aioxmpp is a Python library based on asyncio. It implements the client side of the XMPP protocol (RFC 6120 and others). For a more detailed description of the package, please review the README of the package on GitHub [1] or on PyPI [2]. For more information on XMPP, please see [8]. aioxmpp is licensed under the terms of the GNU Lesser General Public License Version 3.0 or later. Version 0.8 is a feature release. Major features include: * Support for executing Ad-Hoc Commands [XEP-0050] with peers. * Easier creation of new protocol services (aioxmpp.service.Service subclasses) using decorators stanza handlers and other niceties. * End-to-end/Integration tests against XMPP servers are now supported. Many of the other changes were under the hood. Please refer to the changelog for this release [9] for details and breaking changes compared to the previous release. Bugs, feature requests, patches and questions can be directed to either the aioxmpp mailing list [4], the GitHub issue tracker [5] or the XMPP Multi-User chat [6], whatever floats your boat. Please direct security-relevant issue reports directly to me (jo...@wielicki.name), preferably encrypted using my GPG public key [7]. best regards and happy-asyncio-ing, Jonas Wielicki [1]: https://github.com/horazont/aioxmpp [2]: https://pypi.python.org/pypi/aioxmpp [3]: https://docs.zombofant.net/aioxmpp/0.8/ [4]: https://lists.zombofant.net/mailman/listinfo/aioxmpp-devel [5]: https://github.com/horazont/aioxmpp/issues [6]: aiox...@conference.zombofant.net [7]: https://sks-keyservers.net/pks/lookup?op=get&search=0xE5EDE5AC679E300F AA5A 78FF 508D 8CF4 F355 F682 E5ED E5AC 679E 300F [8]: https://xmpp.org/ [9]: https://docs.zombofant.net/aioxmpp/0.8/api/changelog.html#version-0-8 [XEP-0050]: https://xmpp.org/extensions/xep-0050.html signature.asc Description: This is a digitally signed message part. -- https://mail.python.org/mailman/listinfo/python-list
Re: Problem With Tkinter Font
On Sun, 26 Feb 2017 09:17:00 +0100, Peter Otten wrote: > Wildman via Python-list wrote: > >> Python 3.4.2 >> Tkinter 8.6 >> Linux >> >> I want to set the font in a GUI program I am working on. >> Here is the pertinent code I am using... >> >> from tkinter import font >> >> myfont = font.Font(family='Helvetica', size=10, weight='bold') >> >> Here is the error I get... >> >> Traceback (most recent call last): >> File "./test.py", line 41, in >> myfont = font.Font(family='Helvetica', size=10, weight="bold") >> File "/usr/lib/python3.4/tkinter/font.py", line 93, in __init__ >> tk.call("font", "create", self.name, *font) >> AttributeError: 'NoneType' object has no attribute 'call' >> >> From my research, the syntax is correct but I am having >> doubts. Can anyone clarify? > > If you do not provide the root argument there is still an implicit > dependency: > > """ > class Font: > ... > def __init__(self, root=None, font=None, name=None, exists=False, > **options): > if not root: > root = tkinter._default_root > tk = getattr(root, 'tk', root) > > """ > import tkinter from tkinter import font font.Font(family="Helpvetica", size=10, weight="bold") > Traceback (most recent call last): > File "", line 1, in > File "/usr/lib/python3.4/tkinter/font.py", line 93, in __init__ > tk.call("font", "create", self.name, *font) > AttributeError: 'NoneType' object has no attribute 'call' root = tkinter.Tk() font.Font(family="Helpvetica", size=10, weight="bold") > > > So you have to create the main window before you can create a Font. OK, that makes sense. I knew I was doing something dumb or in this case, not doing it. Thank you. -- GNU/Linux user #557453 The cow died so I don't need your bull! -- https://mail.python.org/mailman/listinfo/python-list
Re: Help debugging code - Negative lookahead problem
On 2017-02-26 14:13, michael.gauthier@gmail.com wrote: Hi everyone, So here is my problem. I have a bunch of tweets and various metadata that I want to analyze for sociolinguistic purposes. In order to do this, I'm trying to infer users' ages thanks to the information they provide in their bio, among others. For that I'm using regular expressions to match a couple of recurring patterns in users' bio, like a user mentioning a number followed by various spellings of "years old" as in: "John, 30 years old, engineer." The reason why I'm using regexes for this is that there are actually very few ways people use to mention there age on Twitter, so just three or four regexes would allow me to infer the age of most users in my dataset. However, in this case I also want to check for what comes after "years old", as many people mention their children's age, and I don't want this to be incorrectly associated to the user's age, as in: "John, father of a 12 year old kid, engineer" So cases as the one above should be ignored, so that I can only keep users for whom a valid age can be inferred. My program looks like this: import csv import re with open("test_corpus.csv") as corpus: corpus_read = csv.reader(corpus, delimiter=",") for row in corpus_read: if re.findall(r"\d{2}\s?(?=years old\s?|yo\s?|yr old\s?|y o\s?|yrs old\s?|year old\s?(?!son|daughter|kid|child))",row[5].lower()): age = re.findall(r"\d{2}\s?",row[5].lower()) for i in age: print(i) The program seems to work in some cases, but in the small test file I created to try it out, it incorrectly matches the age mentioned in the string "I have a 12 yo son", and returns 12 as a matched age, which I don't want it to. I'm guessing this has something to do with brackets or delimiters at some point in the program, but I spent a few days on it, and I could not find anything helpful around here or on other forums, so any help would be appreciated. Thus, the actual question is: how to make the program not recognize 12 in "John, father of a 12 year old kid, engineer" as the age of the user, based on the program I already have? I am somewhat new at programming, so apologies if I forgot to mention something important, do not hesitate to tell me if you need more details. Thanks in advance for any help you could provide! Remove some of the alternatives and it should become clearer: r"\d{2}\s?(?=years old\s?|year old\s?(?!son|daughter|kid|child))" The negative lookahead is in the last alternative and applies only to that one. Adding a non-capture group (?:...) around the alternatives: r"\d{2}\s?(?=(?:years old\s?|yo\s?|yr old\s?|y o\s?|yrs old\s?|year old\s?)(?!son|daughter|kid|child))" Another point: the \d{2} will match only 2 digits and there's nothing to prevent it from matching the end of a series of digits, so but if the person was, say, 101 years old, it would match "01". Try matching 2 or more digits with \d{2,}. -- https://mail.python.org/mailman/listinfo/python-list
Re: Help debugging code - Negative lookahead problem
Hi MRAB, Thanks for taking time to look at my problem! I tried your solution: r"\d{2}\s?(?=(?:years old\s?|yo\s?|yr old\s?|y o\s?|yrs old\s?|year old\s?)(?!son|daughter|kid|child))" but unfortunately it does seem not work. Also, I tried adding the negative lookaheads after every one of the alternatives, but it does not work either, so the problem does not seem to be that the negative lookahead applies only to the last proposition... : ( Also, \d{2} will only match two single digits, and won't match the last two digits of 101, so at least this is fine! : ) Any other idea to improve that code? I'm starting to get desperate... Thanks again for your help anyways, I really appreciate it! ; ) -- https://mail.python.org/mailman/listinfo/python-list
Re: Python 3.6 installation doesn't add launcher to PATH
On Sun, Feb 26, 2017 at 3:09 PM, ChrisW wrote: > On Saturday, 25 February 2017 07:21:30 UTC, eryk sun wrote: >> On Fri, Feb 24, 2017 at 12:38 PM, ChrisW wrote: >> > However, I've installed Python 3.6 with the 'include PATH' checkbox ticked >> > for my user only, and although C:\Windows\py.exe exists, it has not been >> > added to my PATH. >> > >> > I also tried installing for all users, and this also doesn't add it to the >> > PATH. >> > >> > Is this a bug, or have I done something wrong?! >> >> What the installer adds to PATH is the Python36[-32] directory that >> has python.exe and the Scripts directory that has pip.exe. The >> recommended way to run Python is via the "python" command not "py". >> The py launcher is mainly for shell executing script files with >> shebang processing. That said people do use py -X[-Y[-32]] as a >> convenient way to run multiple versions of Python without modifying >> PATH. >> >> As to adding SystemRoot to PATH, it should be there already. This >> doesn't matter if the program lets CreateProcess search because it >> always searches system directories before PATH. But it matters in a >> common case; cmd.exe does its own search and only searches PATH (and >> also the current directory if the system is configured insecurely). > > Hmm, that seems to contradict what the docs say: `py` is recommended for > Windows users who want to run various versions (not just for executing > scripts). "python" is the recommended way to run Python that's cross-platform. The last thing I'd want is to see tutorials and FAQs filled with caveats that Windows users should use py -X[.Y[-32]] instead of python. It can be assumed that the environment is configured correctly for the python command to run the desired version of the interpreter. The best way to do that is to develop using virtual environments. Steve Dower (Microsoft) and Nick Coghlan (Red Hat) have made suggestions for a new "python" launcher that can run multiple versions and would be available on all platforms. I've yet to see any specific discussion about this idea on python-ideas or python-dev -- at least not to the point that someone is willing to write a PEP and start coding. It's just a pipe dream for now. > SystemRoot is not in my PATH variable. Open the environment variables editor in the system properties window; double-click on "Path" in the system variables and insert the following at the beginning: %SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem; These are present by default when Windows is installed -- except %SystemRoot% may already be expanded to C:\Windows, or wherever Windows is installed on the system. Someone or some program messed up if they're missing. -- https://mail.python.org/mailman/listinfo/python-list
Re: Help debugging code - Negative lookahead problem
michael.gauthier@gmail.com wrote: > Hi MRAB, > > Thanks for taking time to look at my problem! > > I tried your solution: > > r"\d{2}\s?(?=(?:years old\s?|yo\s?|yr old\s?|y o\s?|yrs old\s?|year > old\s?)(?!son|daughter|kid|child))" > > but unfortunately it does seem not work. Also, I tried adding the negative > lookaheads after every one of the alternatives, but it does not work > either, so the problem does not seem to be that the negative lookahead > applies only to the last proposition... : ( > > Also, \d{2} will only match two single digits, and won't match the last > two digits of 101, so at least this is fine! : ) > > Any other idea to improve that code? I'm starting to get desperate... If your code becomes too complex to manage it break it into simpler parts. In this case you can use two simple regular expressions: >>> age = re.compile(r"\d+") >>> child = re.compile(r"\s+kid") >>> text = "42 bar baz foo 12 kid" >>> for candidate in age.finditer(text): ... if child.match(text, candidate.end()): ... print("Kid's age:", candidate.group()) ... else: ... print("Author's age:", candidate.group()) ... Author's age: 42 Kid's age: 12 Applying that idea (and the principle to break everything into dead easy parts) to your problem: $ cat demo.py import re def longest_first(text): return sorted(text.splitlines(), key=len, reverse=True) YEARS = longest_first("""\ year years year old years old yo ys o """) CHILDREN = longest_first("""\ son daughter kid child """) YEARS_RE = r"\b(?P\d+) ({})".format("|".join(YEARS)) re_years = re.compile(YEARS_RE) CHILD_RE = r" ({})\b".format("|".join(CHILDREN)) re_child = re.compile(CHILD_RE) def followed_by_child(candidate): return re_child.match(candidate.string, candidate.end()) CORPUS = """\ jester, 42 years old, 20 years kidding 12 years kid engineer, 30 years engineer, 30 years old daughter """.splitlines() for text in CORPUS: print(text) for m in re_years.finditer(text): age = m.group("age") if followed_by_child(m): print("rejected:", age) else: print("accepted:", age) $ python3 demo.py jester, 42 years old, 20 years kidding accepted: 42 accepted: 20 12 years kid rejected: 12 engineer, 30 years accepted: 30 engineer, 30 years old daughter rejected: 30 -- https://mail.python.org/mailman/listinfo/python-list
Re: Help debugging code - Negative lookahead problem
On 2017-02-26 17:15, michael.gauthier@gmail.com wrote: Hi MRAB, Thanks for taking time to look at my problem! I tried your solution: r"\d{2}\s?(?=(?:years old\s?|yo\s?|yr old\s?|y o\s?|yrs old\s?|year old\s?)(?!son|daughter|kid|child))" but unfortunately it does seem not work. Also, I tried adding the negative lookaheads after every one of the alternatives, but it does not work either, so the problem does not seem to be that the negative lookahead applies only to the last proposition... : ( Also, \d{2} will only match two single digits, and won't match the last two digits of 101, so at least this is fine! : ) Any other idea to improve that code? I'm starting to get desperate... Thanks again for your help anyways, I really appreciate it! ; ) Ah, OK. I see what the problem is. (I should've marked it as "untested". :-() It matches r"yo\s?" against "yo " (the r"\s?" consumes the space) and then the "son" alternative against "son", but that's a _negative_ lookahead, so it _fails_, so it backtracks. It retries the r"\s?", which now matches an empty string (doesn't consume the space), and then the "son" alternative against " son", which fails, but that's a _negative_ lookahead, so it _succeeds_. And the regex as a whole matches. Ideally I'd want to use a possessive quantifier or atomic group, but they aren't supported by the re module, so the workaround is to move the check for whitespace: r"\d{2}\s?(?=(?:years old|yo|yr old|y o|yrs old|year old)(?!\s?son|\s?daughter|\s?kid|\s?child))" -- https://mail.python.org/mailman/listinfo/python-list
Re: Help debugging code - Negative lookahead problem
WOW, many thanks guys, Peter, and MRAB, for your time, help, and explanations! Peter, yes, you're right, when things get too complicated I should definitely try to split things up, and thus split the difficulties (ah, Descartes... ^^), thanks for the advice! MRAB, your code is now working, thank you SO MUCH! You just put an end to 4 days of headaches because of that code! And most importantly, thanks for the explanation, I can now understand what was wrong in the code and not reproduce the same mistake, your help is invaluable and I can now go on with the rest of my analysis. Thanks again guys, I posted this question on several forums, and you're the only ones who have been able to actually help me solve the issue, you're the best! ; ) -- https://mail.python.org/mailman/listinfo/python-list
Exposing all methods of a class
I use Python, mainly with Django, for work. I was wondering if anyone has encountered an editor that could display a class with all inherited methods included in the editor's view of the class code. I am kind of envisaging the inherited code would be displayed differently (say, grey vs black), and labelled with the name of the parent class so that it would provide a one-stop view of the entire class structure. I edit using vim, and use ctags to explore up the inheritance chain which is useful enough, but I feel it should be quite possible for the editor to search through the imports and grab the parent classes to insert into the editor view. Any suggestions? Maybe there are better ways of navigating inheritance but it does seem logical to expose the whole class code in one place, suitably annotated. I feel a plugin coming on. Ta, Pete -- https://mail.python.org/mailman/listinfo/python-list
Talk Python to Me with GvR
https://player.backtracks.fm/talkpython/m/100-guido-van-rossum Both audio and transcript. There is more discussion of Guido's pre-Python work than I have read before. Discussion of Python 3 migration starts at 37:05. Guido says harder than expected because Python was more popular than he was aware of at the time. -- Terry Jan Reedy -- https://mail.python.org/mailman/listinfo/python-list
dictionary of pickle error when get it in multiprocessing and has name error
before cloususerlogin Unexpected error: after map pool ... passwordlist = pickle.load( open( str(currentworkingdirectory) + "\\decryptedsecret.p", "rb" ) ) def processInput(host): try: decrypt_file(sys.argv[1], str(currentworkingdirectory) + "\\encryptedsecret.p", str(currentworkingdirectory) + "\\decryptedsecret.p", 64*1024) if os.path.isfile(str(currentworkingdirectory) + "\\decryptedsecret.p") == True: print("exist file") else: print("not exist file") print(str(currentworkingdirectory) + "\\decryptedsecret.p") HOST = host print(host) print("before cloususerlogin") password = passwordlist["clouduserlogin"] <--- Name error print(host) text_file.write(host+"\n") try: print("before recursiveconnect") recursiveconnect(host,"") print("after recursiveconnect") except: print "inner Unexpected error:", sys.exc_info()[0] except: print "Unexpected error:", sys.exc_info()[0] resultstringedge = "" def easy_parallize(): pool = Pool(4) print("after pool") hostlist = [ "192.168.1.1" ] #foo = Foo() #results = pool.apply_async(processInput,args=(hostlist,)) results = pool.map(processInput, hostlist) print("after map pool") cleaned = [x for x in results if not x is None] cleaned = np.asarray(cleaned) pool.close() pool.join() print("cleaned") return cleaned if __name__ == '__main__': currentworkingdirectory = str(os.getcwd()).replace("\\","") text_file = open(newpath+"\\"+"errorstest.txt", "w") easy_parallize() print("111") #for host in hostlist: #if os.path.isfile(str(currentworkingdirectory) + "\\decryptedsecret.p") == True: #try: #os.remove(str(currentworkingdirectory) + "\\decryptedsecret.p") #except: #print("ignored error") print("here close 1") text_file.close() print("here close 2") text_file10.close() -- https://mail.python.org/mailman/listinfo/python-list
Re: concurrent futures, async futures and await
>> >> Simply because the concurrent future returned by executor.submit does >> not implement __await__ and so it cannot be awaited for. > I get that, but what happens if you try wrapping the executor.submit > call with tornado.gen.convert_yielded as the tornado docs suggest and > as I suggested above? Thanks, it did the right thing. :-) (The tornado docs needs to be updated where it talks about changing normal coroutines to native coroutines.) >> Of course, asyncio should not care if the executor is doing the task in >> a different thread or a different process. All I'm saying is that >> concurrent.futures.Future should implement the __await__ method, and >> asyncio should be able to use it. > I found this in the original PEP at > http://legacy.python.org/dev/peps/pep-3156/#futures: > > """ > In the future (pun intended) we may unify asyncio.Future and > concurrent.futures.Future, e.g. by adding an __iter__() method to the > latter that works with yield from. To prevent accidentally blocking > the event loop by calling e.g. result() on a Future that's not done > yet, the blocking operation may detect that an event loop is active in > the current thread and raise an exception instead. However the current > PEP strives to have no dependencies beyond Python 3.3, so changes to > concurrent.futures.Future are off the table for now. > """ I was not aware of this. Thank you for pointing out. > > Maybe we're now far enough into the future that this could be > reconsidered. In the meantime, the user does have other options: > > 1) For tornado, use tornado.gen.convert_yielded. > > 2) For asyncio, create an asyncio future and link them by setting a > callback on the concurrent future that propagates the result (using > call_soon_threadsafe since the callback may run in another thread). > > 3) Better, don't use concurrent.futures directly in the first place; > instead use > https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.AbstractEventLoop.run_in_executor > which runs a function in an Executor and wraps it up via #2 > transparently. That is the best. I have discovered another anomaly: asyncio names this "run_in_executor" but tornado names it "run_on_executor" ( http://www.tornadoweb.org/en/stable/concurrent.html#tornado.concurrent.run_on_executor ) I hope eventually they will become fully compatible. :-) Thanks for your help! Laszlo -- https://mail.python.org/mailman/listinfo/python-list