#!/usr/bin/perl use strict; use warnings; use POSIX qw(_exit); use DBI; use File::Temp; $| = 1; my $dbfile = "/tmp/db-$$"; my $dbh = DBI->connect("dbi:SQLite:$dbfile", "", "", {RaiseError => 1}); $dbh->do("create table queue (child, ix)"); for my $id (0..3) { fork or do { print "<$id enter>"; my $dbh = DBI->connect("dbi:SQLite:$dbfile", "", "", {RaiseError => 1}); $dbh->do("PRAGMA journal_mode = OFF"); my $sth; while (not defined $sth) { $sth = eval { $dbh->prepare("insert into queue values (?, ?)") }; } print "<$id with sth>"; for (1..1000) { eval { $sth->execute($id, $_); print $id; }; $@ and print "<$id error: $@>" }; print "<$id exit>"; _exit(0); } } 1 while (wait > 0); my $sth = $dbh->prepare("select count(*) from queue"); $sth->execute; my $row = $sth->fetchrow_arrayref; print "\n@$row\n";