<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Aug 2, 2010, at 9:53 AM, <a href="mailto:exarkun@twistedmatrix.com">exarkun@twistedmatrix.com</a> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: 'Bitstream Vera Sans Mono'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><span class="Apple-style-span" style="font-family: monospace; ">On 01:27 pm,<span class="Apple-converted-space"> </span><a href="mailto:mal@egenix.com">mal@egenix.com</a><span class="Apple-converted-space"> </span>wrote:<br><blockquote type="cite"><a href="mailto:exarkun@twistedmatrix.com">exarkun@twistedmatrix.com</a><span class="Apple-converted-space"> </span>wrote:<br></blockquote><blockquote type="cite"><blockquote type="cite">On 12:21 pm,<span class="Apple-converted-space"> </span><a href="mailto:mal@egenix.com">mal@egenix.com</a><span class="Apple-converted-space"> </span>wrote:<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">See Zope for an example of how well this simply mechanism works out in<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">practice: it simply scans the "Products" namespace for sub-packages and<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">then loads each sub-package it finds to have it register itself with<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Zope.<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">This is also roughly how Twisted's plugin system works. One drawback,<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">though, is that it means potentially executing a large amount of Python<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">in order to load plugins. This can build up to a significant<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">performance issue as more and more plugins are installed.<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">I'd say that it's up to the application to deal with this problem.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">An application which requires lots and lots of plugins could<br></blockquote><blockquote type="cite">define a registration protocol that does not require loading<br></blockquote><blockquote type="cite">all plugins at scanning time.<br></blockquote><br>It's not fixable at the application level, at least in Twisted's plugin system. It sounds like Zope's system has the same problem, but all I know of that system is what you wrote above. The cost increases with the number of plugins installed on the system, not the number of plugins the application wants to load.<br></span></span></blockquote></div><br><div>We do have a plan to address this in Twisted's plugin system (eventually): <<a href="http://twistedmatrix.com/trac/ticket/3773">http://twistedmatrix.com/trac/ticket/3773</a>>, although I'm not sure if that's relevant to the issue at hand.</div><div><br></div></body></html>