<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>I am updating an item in a separated thread but when it finishes the new value is not updated in the same object in the main thread.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>In the example below root['counter'] starts in 0, is incremented in the new thread but it remains in 0 in the main thread.<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'>#!/usr/bin/python<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'>from ZODB.FileStorage import FileStorage<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>from ZODB.DB import DB<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>from BTrees.OOBTree import OOBTree<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>import transaction<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>from threading import Thread<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>import persistent<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'>class MyThread(Thread):<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp; def __init__(self, db):<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread.__init__(self)<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.db = db<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp; def run(self):<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.connection = self.db.open(transaction.TransactionManager())<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.root = self.connection.root()<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &quot;Starting thread&quot;<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.connection.transaction_manager.begin()<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.root[&quot;counter&quot;] += 1<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.connection.transaction_manager.commit()<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &quot;self.root['counter'] =&quot;, self.root['counter']<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'>filename = 'test.fs'<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'>storage = FileStorage(filename)<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>db = DB(storage)<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>connection = db.open()<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'>root = connection.root()<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>if 'counter' not in root:<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp; transaction.begin()<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp; root['counter'] = 0<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>&nbsp;&nbsp; transaction.commit()<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'>thread = MyThread(db)<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>thread.start()<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'>thread.join()<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'>print &quot;*** After ***&quot;<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'>print &quot;root['counter'] =&quot;, root['counter']<o:p></o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='margin-left:.5in'><o:p>&nbsp;</o:p></p><p class=MsoNormal>Thanks,<o:p></o:p></p><p class=MsoNormal>Sebastian<o:p></o:p></p></div></body></html>