[Seaside] ThreadPool with Seaside - how?
Ramon Leon
ramon.leon at allresnet.com
Wed Jul 26 18:03:32 UTC 2017
On 07/26/2017 03:09 AM, Sabine Manaa wrote:
> -> this does not work.
> The generation of my reports needs the sessions objects.
> Also, calling another method of the session does not work.
>
> html mdlButton
> onClick:
> (html jQuery ajax
> script: [ :script | [ self session inspect ] queueWorkAndExpireIn: 25
> seconds session: self session ]);
> with: '1'
I concur with Phillipe about being very careful using the session on a
background thread as it's not meant to be thread safe and could
potentially lead to concurrency bugs if you're not very careful;
however, it's easy to do if you want to by simply using a closure.
| session |
"compute the current session and put into local var"
session := self session.
html mdlButton
onClick:
(html jQuery ajax
script: [ :script | [ session inspect ] queueWork ]);
with: '1'
In other words don't access "self session" because that computes the
session for the current thread which doesn't work on a background
thread. You can pass data to the background thread by having that data
within the lexical scope of the block you launch as demonstrated above.
Calling fork would work just as well as queueWork, all the ThreadPool
does is ensure there's a limited amount of background jobs running at
any one time so you don't fork bomb yourself with too many threads and
lock up your image.
--
Ramon Leon
More information about the seaside
mailing list