LINUX.ORG.RU

Сообщения docpro

 

«„ЭЭ

Форум — Linux-org-ru

Зачем на техническом форуме делать дефолтные кавычки для «девачек», которые потом неправильно копипастятся? Извините, если было, правила вроде читал.

 

docpro
()

x86 intel

Форум — Development

Инструкции enter и leave бессмысленны для С. Кроме Паскаля где еще используются? И как в противном случае это реализуется.

 , , ,

docpro
()

Посчитать количество вхождений слов и занести в БД

Форум — Development

Нужно, из потенциально очень большого файла в юникоде, вычленить все уникальные слова и занести в базу с количеством вхождений. Возможное количество слов не ограничено человеческим языком... Как сделать быстрее?

#!/usr/bin/python

import pymysql, os, sys, atexit, re

#MariaDB [words]> describe words;
#+-------+------------------+------+-----+---------+----------------+
#| Field | Type             | Null | Key | Default | Extra          |
#+-------+------------------+------+-----+---------+----------------+
#| id    | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
#| word  | char(64)         | NO   | UNI | NULL    |                |
#| count | int(11)          | NO   |     | 0       |                |
#+-------+------------------+------+-----+---------+----------------+

sql = """INSERT INTO `words` (`word`, `count`)
        VALUES (%s, %s) ON DUPLICATE KEY 
        UPDATE `count` = `count`+VALUES(`count`) """

child_pid = 0

def pushbuf():
    print('words:', len(wbuf))
    #print('size:', sys.getsizeof(wbuf))
    global child_pid
    if child_pid != 0: os.wait()
    child_pid = os.fork()
    if child_pid != 0: 
        wbuf.clear()
        return
    with db.cursor() as cursor:
        try:
            db.begin()
            cursor.executemany(sql, wbuf.items())
            cursor.close()
            db.commit()
        except:
            db.rollback()
            raise(print('wtf1?!'))
    sys.exit(0)

def end():
    if child_pid != 0:
        f.close()
        os.wait()
        db.close()

atexit.register(end)

db = pymysql.connect("localhost","root","paSSword","words", charset="utf8")
with db.cursor() as cursor:
    try:
        db.autocommit(False)
        cursor.execute("TRUNCATE `words`")
        cursor.close()
        db.commit()
    except:
        raise(print('wtf0?!'))


wbuf={}
wbuflen=10000
f=open("warpeace.txt","r")

for line in f:
    for word in re.findall(r'[^\W\d]+', line):
        newword=word.lower()
        #wbuf[newword] = wbuf.get(newword,0)+1
        if newword in wbuf:
            wbuf[newword] += 1
        else:
            wbuf[newword] = 1
            if len(wbuf) >= wbuflen: pushbuf()
pushbuf()
Посоветуйте, в какую сторону копать для оптимального решения?

И насколько оправдано использование executemany(), особенно с учетом того, что предварительно словарь конвертируется в список? Может executemany вообще не дает преимуществ, кроме краткости, правильнее делать цикл с execute()?

 

docpro
()

ненужные логи от cron

Форум — Admin

Здравствуйте! Как сделать, чтобы крон не спамил каждые 10 минут подобным:

Nov 2 11:30:01 localhost6 cron[5365]: (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/run-crons)

Nov 2 11:36:32 localhost6 cron[5448]: (CRON) STARTUP (V5.0)

Nov 2 11:40:02 localhost6 cron[5460]: (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/run-crons)

Nov 2 11:50:01 localhost6 cron[5481]: (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/run-crons)

Nov 2 11:59:01 localhost6 cron[5501]: (root) CMD (rm -f /var/spool/cron/lastrun/cron.hourly)

Nov 2 12:00:01 localhost6 cron[5505]: (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/run-crons)

 , ,

docpro
()

RSS подписка на новые темы