[IronPython] importing on different threads

Curt Hagenlocher curt at hagenlocher.org
Thu Aug 21 16:42:53 CEST 2008


As things stand now, I think you'll need either some kind of manual locking
or you'll need a different heuristic to tell you whether or not the module
has finished loading.
On Thu, Aug 21, 2008 at 7:20 AM, Kamil Dworakowski
<kamil at dworakowski.name>wrote:

> We want Resolve One to start quicker. We have found large speedups by
> delaying importing of some modules.
>
> This is implemented by moving some import statements into bodies of methods
> and function, so that the modules are imported lazily when they are actually
> needed. Since Resolver One runs many threads clashes happen.
>
> Kamil
>
>
>
> On Thu, Aug 21, 2008 at 1:53 PM, Curt Hagenlocher <curt at hagenlocher.org>wrote:
>
>> What's the scenario under which you want to do this? Is there a fixed set
>> of modules being imported by your application or is the list not known until
>> runtime?
>>
>> The behavior you describe with respect to sys.modules is identical to that
>> in CPython.  In fact, it's required in order to resolve circular imports.
>> Without it, if module A were to import module B and module B imported module
>> A, you'd end up with infinite recursion.
>>
>> Where IronPython is "worse" than CPython in this regard is that it takes
>> us longer to import a module.  This increases the chance for a collision in
>> an application where modules may be imported from multiple threads.
>>
>>   On Thu, Aug 21, 2008 at 5:11 AM, Kamil Dworakowski <
>> kamil at dworakowski.name> wrote:
>>
>>>   We are trying parallel imports, which somtimes fail with ImportError
>>> (ipy 1.1.1). This happens when one thread attempts to import a module which
>>> is being imported on a different thread. The number of such risky imports is
>>> not high, and we deal with this by catching the exception and retrying.
>>>
>>> What do you think? Is it a wrong thing to do? I would like to avoid
>>> locking.
>>>
>>> I have just glimpsed over the IronPython source. Does the problem here is
>>> that when one thread starts to import a module it inserts an emty entry into
>>> sys.modules, thus other threads get None (or ImportError when using "import
>>> from" statement) until the module is fully imported?
>>>
>>> Kamil Dworakowski
>>> Resolver Systems Ltd
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.ironpython.com
>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>
>>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>>
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20080821/8a4c9e39/attachment.html>


More information about the Ironpython-users mailing list